splram
asked on
Changin default value of a paradox field
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
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
have one piece . . . searching
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. FieldByNam e('Numeric '),@cmin,@ cmax,@cdef ,
SizeOf(cMin),SizeOf(cMax), SizeOf(cde f),True);
//Set Validate for Integer Field
lmin := -100;
lmax := 100;
ldef := 1;
SetValCheck(Table6,Table6. FieldByNam e('Integer '),@lmin,@ lmax,@ldef ,
SizeOf(lMin),SizeOf(lMax), SizeOf(lde f),True);
//Set Validate for Alphanumeric Field
amin := 'A';
amax := 'ABCDE';
adef := 'AB';
SetValCheck(Table6,Table6. FieldByNam e('Alpha') ,@amin[1], @amax[1],@ adef[1],
length(amin),length(aMax), length(ade f),True);
//Set Validate for Boolean Field (Default only)
bdef := False;
SetValCheck(Table6,Table6. FieldByNam e('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. FieldByNam e('Date'), @dmin,@dma x,@ddef,
SizeOf(dMin),SizeOf(dMax), SizeOf(dde f),True);
end;
-- hope this helps
meikl ;-)
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.
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, 0, nil, nil, hDb));
Check(DbiSetDirectory(hDb,
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
StrCopy(TblDesc.szTblType,
Check(DbiDoRestructure(hDb
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,
Result := Mydate;
end;
//Table must be opened exclusive,
//a validate check may not exist
procedure TForm1.Button2Click(Sender
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.
SizeOf(cMin),SizeOf(cMax),
//Set Validate for Integer Field
lmin := -100;
lmax := 100;
ldef := 1;
SetValCheck(Table6,Table6.
SizeOf(lMin),SizeOf(lMax),
//Set Validate for Alphanumeric Field
amin := 'A';
amax := 'ABCDE';
adef := 'AB';
SetValCheck(Table6,Table6.
length(amin),length(aMax),
//Set Validate for Boolean Field (Default only)
bdef := False;
SetValCheck(Table6,Table6.
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.
SizeOf(dMin),SizeOf(dMax),
end;
-- hope this helps
meikl ;-)
appendix
if you want only set defaults,
them set the min and max-value to nil
like in the boolean sample above
if you want only set defaults,
them set the min and max-value to nil
like in the boolean sample above
ASKER
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. FieldByNam e('Funcloc '),nil,nil ,@adef[1],
0,0,length(adef),True);
Whats wrong with this?
"INVALID ARRAY OF VALIDITY CHECK DESCRIPTORS".
This is how I'm invoking the SetValCheckFunction
amin := 'A';
amax := 'ABCDE';
adef := 'AB';
SetValCheck(Table1,Table1.
0,0,length(adef),True);
Whats wrong with this?
which delphi-version do you use?
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 ;-)
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 ;-)
ASKER
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));
the statement where error is cropping is:
Check(DbiDoRestructure(hDb
well,
checking myself this evening (d5 i can check :-)
thats in ~5 hours
meikl ;-)
checking myself this evening (d5 i can check :-)
thats in ~5 hours
meikl ;-)
ASKER
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.
Thanks a lot for your contrinution, hope I get answer after 5 hrs.
i will do my best for reproducing and solving
we will see, what happened :-))
we will see, what happened :-))
ASKER
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
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
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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 ;-)
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 ;-)
oops, doublepost, sorry :-))