Solved

Changin default value of a paradox field

Posted on 2002-05-27
14
328 Views
Last Modified: 2010-04-04
Hi All,

I've created one field which has a default value 100 (this default value is assigned using database desktop utility), I want to have a delphi piece of code using which I can change the default value of any database field to any user defined value.

Thanks in advance

Rammohan
0
Comment
Question by:splram
  • 10
  • 4
14 Comments
 
LVL 27

Expert Comment

by:kretzschmar
Comment Utility
have one piece . . . searching
0
 
LVL 27

Expert Comment

by:kretzschmar
Comment Utility
here it comes,

bde-unit is used in the unit-clause

from my paqs, modified dbiapi-samples

---------- Validation

For setting a validation-check in paradox

//Set a Valcheck, valcheck may not exist
procedure SetValCheck(Tbl: TTable; Field: TField; MinVal, MaxVal,
          DefVal: Pointer; MinSize,MaxSize,DefSize : Integer; Required: Bool);
var
 hDb: hDbiDb;
 TblDesc: CRTblDesc;
 VChk: pVChkDesc;
 Dir: String;
 NumVChks: Word;
 OpType: CROpType;

begin
 NumVChks := 0;
 SetLength(Dir, dbiMaxNameLen + 1);
 Check(DbiGetDirectory(Tbl.DBHandle, False, PChar(Dir)));
 SetLength(Dir, StrLen(PChar(Dir)));
 VChk := AllocMem(sizeof(VChkDesc));
 try
   FillChar(TblDesc, sizeof(CRTblDesc), #0);

   VChk.iFldNum := Field.Index + 1;
   Tbl.DisableControls;
   Tbl.Close;
   Check(DbiOpenDatabase(nil, nil, dbiReadWrite, dbiOpenExcl,
              nil, 0, nil, nil, hDb));
   Check(DbiSetDirectory(hDb, PChar(Dir)));
   with VChk^ do
   begin
     bRequired := Required;
     if MinVal <> nil then
     begin
       Inc(NumVChks);
       bHasMinVal := True;
       move(MinVal^, aMinVal, MinSize);
     end
     else
       bHasMinVal := False;
     if MaxVal <> nil then

     begin
       Inc(NumVChks);
       bHasMaxVal := True;
       move(MaxVal^, aMaxVal, MaxSize);
     end
     else
       bHasMaxVal := False;
     if DefVal <> nil then
     begin
       Inc(NumVChks);
       bHasDefVal := True;
       move(DefVal^, aDefVal, DefSize);
     end
     else
       bHasDefVal := False;

   end;
   TblDesc.iValChkCount := NumVChks;
   TblDesc.pVChkDesc := VChk;
   OpType := crADD;
   TblDesc.pecrValChkOp := @OpType;

   StrPCopy(TblDesc.szTblName, Tbl.TableName);
   StrCopy(TblDesc.szTblType, szParadox);
   Check(DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False));
 finally
   Check(DbiCloseDatabase(hDb));
   FreeMem(VChk, sizeof(VChkDesc));
   Tbl.EnableControls;
   Tbl.Open;
 end;
end;

//Help Function to encode bde-date
Function GetBDEDate(Month, Day : Word; Year : SmallInt; var MyDate : DbiDate) : DbiDate;
begin
 Check(DbiDateEncode(Month, Day, Year, MyDate));
 Result := Mydate;
end;


//Table must be opened exclusive,
//a validate check may not exist
procedure TForm1.Button2Click(Sender: TObject);
var
 cmin,cmax,cdef : Double;
 lmin,lmax,ldef : Longint;
 amin,amax,adef : String;
 bdef : Boolean;
 dmin,dmax,ddef : dbiDate;
begin
 //Set validate for numeric Field
 cmin := -2.5;
 cmax := 2.5;
 cdef := 0.01;
 SetValCheck(Table6,Table6.FieldByName('Numeric'),@cmin,@cmax,@cdef,
             SizeOf(cMin),SizeOf(cMax),SizeOf(cdef),True);

 //Set Validate for Integer Field
 lmin := -100;
 lmax := 100;
 ldef := 1;
 SetValCheck(Table6,Table6.FieldByName('Integer'),@lmin,@lmax,@ldef,
             SizeOf(lMin),SizeOf(lMax),SizeOf(ldef),True);

 //Set Validate for Alphanumeric Field
 amin := 'A';
 amax := 'ABCDE';
 adef := 'AB';
 SetValCheck(Table6,Table6.FieldByName('Alpha'),@amin[1],@amax[1],@adef[1],
             length(amin),length(aMax),length(adef),True);

 //Set Validate for Boolean Field (Default only)
 bdef := False;
 SetValCheck(Table6,Table6.FieldByName('Boolean'),Nil,nil,@bdef,
             0,0,SizeOf(bdef),True);

 //Set Validate for DateField
 dMin := GetBDEDate(1,1,1999,dmin);
 dMax := GetBDEDate(12,31,1999,dmax);
 dDef := GetBDEDate(7,1,1999,ddef);
 SetValCheck(Table6,Table6.FieldByName('Date'),@dmin,@dmax,@ddef,
             SizeOf(dMin),SizeOf(dMax),SizeOf(ddef),True);
end;


-- hope this helps

meikl ;-)
0
 
LVL 27

Expert Comment

by:kretzschmar
Comment Utility
appendix

if you want only set defaults,
them set the min and max-value to nil
like in the boolean sample above

0
 

Author Comment

by:splram
Comment Utility
Thanks for your prompt/early reply, I'm getting an error message when trying to change the default value for a string field the error is:

"INVALID ARRAY OF VALIDITY CHECK DESCRIPTORS".

This is how I'm invoking the SetValCheckFunction

amin := 'A';
amax := 'ABCDE';
adef := 'AB';
SetValCheck(Table1,Table1.FieldByName('Funcloc'),nil,nil,@adef[1],
            0,0,length(adef),True);


Whats wrong with this?

0
 
LVL 27

Expert Comment

by:kretzschmar
Comment Utility
which delphi-version do you use?
0
 
LVL 27

Expert Comment

by:kretzschmar
Comment Utility
just to say the sample was for d3 long time ago,

it could be that in later versions this conversion
,@adef[1], did not work.

replace it with

PChar(adef)

well, testing myself this evening (with d5)
(no delphi on hand yet)

meikl ;-)

           
0
 

Author Comment

by:splram
Comment Utility
Though I changed it to pchar(adef) its giving the same error, FYI, I'm working with delphi 5

the statement where error is cropping is:

  Check(DbiDoRestructure(hDb, 1, @TblDesc, nil, nil, nil, False));
0
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
LVL 27

Expert Comment

by:kretzschmar
Comment Utility
well,
checking myself this evening (d5 i can check :-)
thats in ~5 hours

meikl ;-)
0
 

Author Comment

by:splram
Comment Utility
I think you have taken Me to the 1 step behind the solution, I would owe My sincere thanks if you can take Me to the complete solution.

Thanks a lot for your contrinution, hope I get answer after 5 hrs.

0
 
LVL 27

Expert Comment

by:kretzschmar
Comment Utility
i will do my best for reproducing and solving
we will see, what happened :-))
0
 

Author Comment

by:splram
Comment Utility
Hello meikl,

Kudos to you, I cracked the error the problem was:

OpType was crAdd,
I changed it to
crMODIFY;

Then worked thanks a ton

bye
Rammohan
0
 
LVL 27

Accepted Solution

by:
kretzschmar earned 200 total points
Comment Utility
ahh,

thats, why i wrote
//a validate check may not exist
:-))

but its now about ~3 years ago,
i wrote this based on a bdeapi-sample from borland,
and i guess i had searched some time
to get the cause on the opType for your reported failure

well glad you got it work

meikl ;-)
0
 
LVL 27

Expert Comment

by:kretzschmar
Comment Utility
ahh,

thats, why i wrote
//a validate check may not exist
:-))

but its now about ~3 years ago,
i wrote this based on a bdeapi-sample from borland,
and i guess i had searched some time
to get the cause on the opType for your reported failure

well glad you got it work

meikl ;-)
0
 
LVL 27

Expert Comment

by:kretzschmar
Comment Utility
oops, doublepost, sorry :-))
0

Featured Post

How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

Join & Write a Comment

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
Introduction Raise your hands if you were as upset with FireMonkey as I was when I discovered that there was no TListview.  I use TListView in almost all of my applications I've written, and I was not going to compromise by resorting to TStringGrid…
This tutorial demonstrates a quick way of adding group price to multiple Magento products.
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now