PDA

View Full Version : ایجاد جدول Foxpro در زمان اجرا



Delphi KDE
یک شنبه 08 شهریور 1383, 02:36 صبح
در برنامه ای نیاز به ساخت جدول فاکس در زمان اجرا است
من از کد زیر برای ساخت جدول استفاده میکنم

procedure TForm1.ConvertButtonClick(Sender: TObject);
Const
Dir : pchar = 'c:' ;
var
Table : TTable ;
begin
{ create a BDE alias ,but only if it dosen't alrady exist.}
if not Session.IsAlias('testTable') then begin
CreateDirectory(Dir, nil);
try
Session.AddStandardAlias('testTable', Dir,'FOXPRO');
Session.SaveConfigFile;
Except
MessageDlg('error in create alias', mtError, [mbOK] , 0);
Exit;
end;
end;
{ now Create the Table. }
Screen.Cursor := crHourGlass ;
Table := TTable.Create(self);
try
Table.Active := False ;
Table.DatabaseName := 'testTable' ;
Table.TableType := ttFoxPro ;
Table.TableName := 'testdbf.DBF' ;

{ add field in to database }

Table.FieldDefs.Add('ID',ftString, 10, True);
Table.FieldDefs.Add('FNAME',ftString, 20, False);
Table.FieldDefs.Add('LNAME',ftString, 25, False);
Table.FieldDefs.Add('T1',..XXXX..., 2, False);
Table.FieldDefs.Add('T2',...XXXX..., 12, False);

Table.IndexDefs.Add('','ID',[ixPrimary]);
{ Everything is Set up, so Create the Table. }
Table.CreateTable ;
except
MessageDlg('Error in create Table', mtError, [mbOK], 0);
Screen.Cursor := crDefault;
Table.Free ;
Exit;
end;
{ all done , soo let the user know. }
Table.Free ;
Screen.Cursor := crDefault ;
MessageDlg('Table create complete',mtInformation, [mbOK], 0);
end;
در جایی که ...XXXX... را گذاشته ام نمیدانم چه نوعی رابزارم
چون این جدول در برنامه دیگری در foxpro استفاده میشود که به طور مثال
باید حتما فیلد

Table.FieldDefs.Add('T1',..XXXX..., 2, False);
Table.FieldDefs.Add('T2',...XXXX..., 2, False);
t1,t2 از نوع numeric و دو رقمی ساخته شوند
مشکل در اینجاست که هر نوعی را به جای ...XXXX... میگذارم پیغام خطا میدهد

moradi_am
یک شنبه 08 شهریور 1383, 07:21 صبح
Table.FieldDefs.Add('T1',ftinteger);
Table.FieldDefs.Add('T2',ftinteger);

MiRHaDi
یک شنبه 08 شهریور 1383, 16:56 عصر
سلام
میتونی با SQL خیلی راحت بسازیش :


Create Table "testdbf.dbf" (Id char(10),......)
به همین سادگی ! بعد ازش استفاده کنی
قربانت

Delphi KDE
دوشنبه 09 شهریور 1383, 01:20 صبح
MiRHaDi عزیز من SQL وارد نیستم

میشه معادل کدی رو که نوشتم SQL اون رو برام بنویسی
تعریف alias و ساخت جدول روی دیسک

Delphi KDE
پنج شنبه 12 شهریور 1383, 02:15 صبح
لطفا در صورت امکان راهنمایی کنید
پیشاپیش از همه سپاسگذارم :flower:

شفیعی
یک شنبه 05 مهر 1383, 22:40 عصر
سلام
با روش زیر می توانی یک فایل dbf بسازی
فقط یک مشکل دارد و اینکه به غیر از نوع رشته ای بقیه size نمی گیرند مثلا نمی توانیم مثل فاکس پرو فیلد عددی ، 2 رقمی تعریف نمود


procedure TForm1.Button3Click(Sender: TObject);
begin
with Table1 do begin
Active := False;
DatabaseName := 'C:\';
TableType := ttFoxPro; //ttParadox;
TableName := 'CustInfo1';
{ Don't overwrite an existing table }
if not Table1.Exists then begin
with FieldDefs do begin
Clear;
with AddFieldDef do begin
Name := 'Field1';
DataType := ftString ;
SIZE := 10;
end ;
with AddFieldDef do begin
Name := 'Field2';
DataType := ftString;
Size := 30;
end ;
with AddFieldDef do begin
Name := 'Field3';
DataType := ftInteger;
// Size := 5;
end ;
end ;
{ Call the CreateTable method to create the table }
CreateTable;
end ;
end ;
end;

Delphi KDE
سه شنبه 07 مهر 1383, 00:13 صبح
مشکل من هم همینه

مثلا نمی توانیم مثل فاکس پرو فیلد عددی ، 2 رقمی تعریف نمود
من میخواهم مثل فاکس فیلد عددی دو رقمی یا n رقمی بسازم

شفیعی
شنبه 11 مهر 1383, 18:45 عصر
سلام


میتونی با SQL خیلی راحت بسازیش

دوست عزیز من امتحان کردم به راحتی نمی توان ساخت یا بنده بلد نیستم اگر ممکن است بیشتر توضیح دهید



// dBase Table Creator //

cmd :='CREATE TABLE "MySimpleDBaseSample.dbf" '+ #13 +
'(' + #13 +
'LASTNAME CHAR(20),' + #13 +
'FIRSTNAME CHAR(15),' + #13 +
'SALARY NUMERIC(10,2),' + #13 +
'DEPT_NO SMALLINT' + #13 +
')';
Query1.SQL.Clear;
Query1.SQL.Add(cmd);
query1.ExecSQL;

end;

شفیعی
پنج شنبه 16 مهر 1383, 05:14 صبح
سلام
کسی از دوستان راهی بلد نیست که این مشکل را حل کنیم