Hallo,
Ich versuche vergeblich, einer Paradox-Tabelle ein neues Feld zu definieren.<br>
Die Hilfe-Beispiele sind da nicht sehr hilfreich ...<br>
Hier folgend mein bisheriger Versuch: <br>
procedure TDefineForm.DefineFeld;<br>
var tab:TTable;<br>
ty:TFieldType;feld,art:String;<br>
memsize,f,i,sz:Integer;<br>
hDb: hDBIDb;<br>
TableDesc: CRTblDesc;<br>
Props: CURProps;<br>
pFields: pFLDDesc;<br>
pOp: pCROpType;<br>
B: Byte;<br>
begin<br>
feld:='';sz:=0;f:=0;<br>
art:='';<br>
try<br>
tab:=TTable.Create(Application);<br>
with tab do begin<br>
Active := False;<br>
DatabaseName :=AliasBox.Text;<br>
TableName:=TabellenBox.Text;<br>
TableType:=ttParadox;<br>
if ((pos('.dbf',TabellenBox.text)>0) or<br>
(pos('.DBF',TabellenBox.text)>0)) then tableType:=ttDBase;<br>
if ((pos('.txt',TabellenBox.text)>0) or<br>
(pos('.TXT',TabellenBox.text)>0)) then tableType:=ttASCII;<br>
Exclusive:=True;<br>
end;<br>
tab.FieldDefs.Update;<br>
with tab.FieldDefs do begin<br>
for i:=0 to FelderListe.Items.Count-1 do begin<br>
feld:=FelderListe.Items[i];<br>
art:=TypListe.Items[i];<br>
f:=StrToInt(SizeListe.Items[i]);<br>
if art='A' then ty:=ftString;<br>
if art='D' then ty:=ftDate;<br>
if art='S' then ty:=ftSmallInt;<br>
if art='I' then ty:=ftInteger;<br>
if art='$' then ty:=ftCurrency;<br>
if art='M' then ty:=ftMemo;<br>
if art='D' then f:=0;<br>
if art='S' then f:=0;<br>
if art='I' then f:=0;<br>
if art='$' then f:=0;<br>
Add(feld,ty,f,False);<br>
end; {for}<br>
end; {with}<br>
// tab.FieldDefs.Update; <br>
pFields := nil;<br>
pOp := nil;<br>
(DbiGetCursorProps(hDBICur(tab), Props));<br>
// Get enough memory for one field desc times the # of fields<br>
MemSize := Props.iFields * SizeOf(FLDDesc);<br>
pFields := AllocMem(MemSize);<br>
// Fill the field descriptor with the existing field information...<br>
(DbiGetFieldDescs(Tab.Handle, pFields));<br>
// Blank out the structure...<br>
FillChar(TableDesc, sizeof(TableDesc), #0);<br>
// Get the database handle from the table's cursor handle...<br>
(DbiGetObjFromObj(hDBIObj(Tab.Handle), objDATABASE,hDBIObj(hDb)));<br>
// Put the table name in the table descriptor...<br>
StrPCopy(TableDesc.szTblName, Tab.TableName);<br>
// Put the table type in the table descriptor...<br>
StrPCopy(TableDesc.szTblType, Props.szTableType);<br>
// The following three lines are necessary when doing any field restructure<br>
// operations on a table...<br>
// Set the field count for the table<br>
TableDesc.iFldCount := Tab.FieldCount;<br>
// Link the operation descriptor to the table descriptor...<br>
TableDesc.pecrFldOp := pOp;<br>
// Link the field descriptor to the table descriptor...<br>
TableDesc.pFldDesc := pFields;<br>
Tab.Close;<br>
// Call DbiDoRestructure...<br>
(DbiDoRestructure(hDBIDB(Tab.Handle), 1, @TableDesc, nil, nil, nil, False));<br>
<br>
tab.Exclusive:=False;<br>
tab.Active:=true;<br>
finally<br>
tab.Active:=False;<br>
tab.free;<br>
// FreeMem(pFields, MemSize);<br>
if (pFields <> nil) then FreeMem(pFields);<br>
if (pOp <> nil) then FreeMem(pOp);<br>
end;<br>
MessageDlg(Fertig,mtInformation,[mbok],0);<br>
end;<br>
Ich versuche vergeblich, einer Paradox-Tabelle ein neues Feld zu definieren.<br>
Die Hilfe-Beispiele sind da nicht sehr hilfreich ...<br>
Hier folgend mein bisheriger Versuch: <br>
procedure TDefineForm.DefineFeld;<br>
var tab:TTable;<br>
ty:TFieldType;feld,art:String;<br>
memsize,f,i,sz:Integer;<br>
hDb: hDBIDb;<br>
TableDesc: CRTblDesc;<br>
Props: CURProps;<br>
pFields: pFLDDesc;<br>
pOp: pCROpType;<br>
B: Byte;<br>
begin<br>
feld:='';sz:=0;f:=0;<br>
art:='';<br>
try<br>
tab:=TTable.Create(Application);<br>
with tab do begin<br>
Active := False;<br>
DatabaseName :=AliasBox.Text;<br>
TableName:=TabellenBox.Text;<br>
TableType:=ttParadox;<br>
if ((pos('.dbf',TabellenBox.text)>0) or<br>
(pos('.DBF',TabellenBox.text)>0)) then tableType:=ttDBase;<br>
if ((pos('.txt',TabellenBox.text)>0) or<br>
(pos('.TXT',TabellenBox.text)>0)) then tableType:=ttASCII;<br>
Exclusive:=True;<br>
end;<br>
tab.FieldDefs.Update;<br>
with tab.FieldDefs do begin<br>
for i:=0 to FelderListe.Items.Count-1 do begin<br>
feld:=FelderListe.Items[i];<br>
art:=TypListe.Items[i];<br>
f:=StrToInt(SizeListe.Items[i]);<br>
if art='A' then ty:=ftString;<br>
if art='D' then ty:=ftDate;<br>
if art='S' then ty:=ftSmallInt;<br>
if art='I' then ty:=ftInteger;<br>
if art='$' then ty:=ftCurrency;<br>
if art='M' then ty:=ftMemo;<br>
if art='D' then f:=0;<br>
if art='S' then f:=0;<br>
if art='I' then f:=0;<br>
if art='$' then f:=0;<br>
Add(feld,ty,f,False);<br>
end; {for}<br>
end; {with}<br>
// tab.FieldDefs.Update; <br>
pFields := nil;<br>
pOp := nil;<br>
(DbiGetCursorProps(hDBICur(tab), Props));<br>
// Get enough memory for one field desc times the # of fields<br>
MemSize := Props.iFields * SizeOf(FLDDesc);<br>
pFields := AllocMem(MemSize);<br>
// Fill the field descriptor with the existing field information...<br>
(DbiGetFieldDescs(Tab.Handle, pFields));<br>
// Blank out the structure...<br>
FillChar(TableDesc, sizeof(TableDesc), #0);<br>
// Get the database handle from the table's cursor handle...<br>
(DbiGetObjFromObj(hDBIObj(Tab.Handle), objDATABASE,hDBIObj(hDb)));<br>
// Put the table name in the table descriptor...<br>
StrPCopy(TableDesc.szTblName, Tab.TableName);<br>
// Put the table type in the table descriptor...<br>
StrPCopy(TableDesc.szTblType, Props.szTableType);<br>
// The following three lines are necessary when doing any field restructure<br>
// operations on a table...<br>
// Set the field count for the table<br>
TableDesc.iFldCount := Tab.FieldCount;<br>
// Link the operation descriptor to the table descriptor...<br>
TableDesc.pecrFldOp := pOp;<br>
// Link the field descriptor to the table descriptor...<br>
TableDesc.pFldDesc := pFields;<br>
Tab.Close;<br>
// Call DbiDoRestructure...<br>
(DbiDoRestructure(hDBIDB(Tab.Handle), 1, @TableDesc, nil, nil, nil, False));<br>
<br>
tab.Exclusive:=False;<br>
tab.Active:=true;<br>
finally<br>
tab.Active:=False;<br>
tab.free;<br>
// FreeMem(pFields, MemSize);<br>
if (pFields <> nil) then FreeMem(pFields);<br>
if (pOp <> nil) then FreeMem(pOp);<br>
end;<br>
MessageDlg(Fertig,mtInformation,[mbok],0);<br>
end;<br>
Comment