PDA

View Full Version : ساخت DBF از نوع فاکس پرو



شفیعی
پنج شنبه 02 مهر 1383, 16:59 عصر
سلام
من یک برنامه نوشته ام که در آن باید برنامه بتواند یک DBF بسازد زیرا بعدا این DBF در نرم افزار ARCVIEW نمایش داده می شود در برنامه با روش زیر DBF را می سازم ولی وقتی در ARCVIEW این فایل را لود می کنم ARCVIEW اطلاعات این فایل نمایش نمی دهد فکر می کنم فایل DBF درست ساخته نمی شود


procedure DBCreate;
var
cmd : String;
begin
///////////////////////////////////////////////
// PARADOX Table Creator //

cmd :='CREATE TABLE "C:\MySimpleParadoxSample.db"' + #13 +
'(' + #13 +
'ID SMALLINT,' + #13 +
'FIRSTNAME CHAR(15),' + #13 +
'LASTNAME CHAR(31),' + #13 +
'PRIMARY KEY(ID)' + #13 +
')';

Query1.SQL.Add(cmd);
query1.ExecSQL;

///////////////////////////////////////////////
// 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;

شفیعی
جمعه 03 مهر 1383, 22:07 عصر
سلام
دوستان نظری در مورد مشکل بالا ندارند خیلی فوری نیاز به آن دارم

mehdi_moosavi
شنبه 04 مهر 1383, 14:59 عصر
سلام
بنظر من دستوراتی که شما نوشتید فقط فایلهای DB میسازن نه DBF
روش زیر رو انجام بدید شاید جواب داد

1- توی محیط فاکس پرو یک برنامه بنویسید و مثلا با اسم pp.prg سیو کنید
set safe off
set talk off
create dbf c:\za1 (cod1 n(3),cod2 n(3))
quit

2- توی محیط دلفی بوسیله دستور Winexec اونو اجرا کنید
WinExec('d:\foxpro\foxpro.exe c:\pp.prg -t',SW_hide);

شفیعی
شنبه 04 مهر 1383, 17:52 عصر
سلام
دوست عزیز یعنی دلفی نمی تواند یک بانک اطلاعاتی از نوع DBF بسازد که مجبور شویم همراه برنامه FOXPRO.EXE را نیز داشته باشیم

mehdi_moosavi
شنبه 04 مهر 1383, 20:37 عصر
سلام
وقتتون بخیر
در مورد اینکه آیا دلفی میتونه فایل dbf بسازه یانه راستشو بخواید اطلاع ندارم.
ولی اگه خواستید از روش بالا استفاده کنید علاوه بر foxpro.exe باید foxpro.ovl رو هم همراه برنامه تون داشته باشید.
به هرحال امیدوارم مشکلتون حل بشه

شفیعی
یک شنبه 05 مهر 1383, 22:44 عصر
سلام
در ادرس زیر یک تکه برنامه هست که با آن در دلفی می توان فایل DBF ساخت فقط یک مشکل کوچک دارد
لطفا ببینید و نظر بدهید
http://www.barnamenevis.org/forum/viewtopic.php?t=13943&highlight=

شفیعی
یک شنبه 19 مهر 1383, 17:09 عصر
سلام
منتظر جواب دوستان هستم

MiRHaDi
دوشنبه 20 مهر 1383, 13:35 عصر
سلام
با SQL خیلی راحت میسازه و مشکلی هم نیست ! اینو بزن

Create Table <tablename> (filedname filedtype,... , primary key(fileds))
فقط باید پسوند فایلت dbf بزنی تا فرمتش رو پاراداکس نده همین !
خیلی راحت هم کار میکنه
اگه فقط میخوای بسازی و نیازی به برنامه نیست با Database Desktop که تو دلفی تا ورژن 7 هست استفاده کن
بای

شفیعی
دوشنبه 20 مهر 1383, 15:16 عصر
سلام


// 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;

دوست عزیز خط زیر را ایراد می گیرد


'SALARY NUMERIC(10,2),' + #13

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

شفیعی
دوشنبه 04 آبان 1383, 21:24 عصر
منتظر جواب دوستان هستم

س.حمیدیانفر
پنج شنبه 07 آبان 1383, 04:51 صبح
سلام
خسته نباشید
متاسفانه دوستان استفاده کردن از visual foxpro رو فراموش کردن . شاید دلیلش اینه که هنوز تو ایران ما باید به یه نرم افزار قوی مثل vfp به عنوان همون فاکس پروی قدیمی تحت داس نگاه کنیم
بگذریم ......

خیلی راحت میشه با یه برنامه ساده ویژوال فاکس پرو یه فایل DLL یا حتی یک EXE تحت ویندوز نوشت و انو توی برنامه اجرا کرد .
آقای شفیعی در اولین فرصت این برنامه رو براتون میفرستم

شفیعی
پنج شنبه 07 آبان 1383, 11:15 صبح
سلام
خیلی ممنون دوست عزیز
منتظر برنامه شما هستم

MiRHaDi
پنج شنبه 07 آبان 1383, 23:37 عصر
سلام
با ایران رادیاتور کی میره تو غار ؟
دلفی رو داریم ! اونو میخوایم چی کار ؟
بای

شفیعی
یک شنبه 24 آبان 1383, 06:38 صبح
سلام
دوست عزیز
با ایران رادیاتور کی میره تو غار ؟
دلفی رو داریم ! اونو میخوایم چی کار ؟
اگر دلفی را داریم پس چرا با آن نمی توانیم فایل DBF بسازیم

Mohsen_4194
یک شنبه 24 آبان 1383, 22:57 عصر
دوست عزیز اگه از ‌BDE استغاده می کنی یه نگاهی به Source کامپوننت TBatchMove بکن خیلی راحت می فهمی چی کار کنی.در ضمن از خودش هم می‌تونی برای ساختن جدولت استفاده کنی.
اگه از ADO استفاده می‌کنی بگو تا یه Sample واست بفرستم.

MiRHaDi
سه شنبه 26 آبان 1383, 23:35 عصر
سلام
آقای شفیعی از شما بعیده ! به دلفی توهین میکنی :)‌؟
عزیزم میشه ! من ساختم ! فاکس پرو شما از DBF نسخه بالا پشتیبانی نمیکنه ! به دلفی چه ؟
بعدشم یه راه بهت میگم کارت راه بیفته این تاپیک دیگه خیلی طولانی شد
ببین Table رو با همون فاکس بساز بذار توی Resource برنامت ! هر جا خواستی از Resource بذارش بیرون و توشو پر کن ! اینجوری به ساختارش دست نمیخوره حله ؟
بای

Delphi KDE
چهارشنبه 27 آبان 1383, 02:08 صبح
ببین Table رو با همون فاکس بساز بذار توی Resource برنامت ! هر جا خواستی از Resource بذارش بیرون و توشو پر کن ! اینجوری به ساختارش دست نمیخوره حله ؟
بای
منم اگه یادتون باشه قبلا این مشکل رو مطرح کرده بودم و یک قطعه کد هم برای ساخت DBF فایل نوشتم ولی من میخواستم توی دلفی فیلد Numeric برای یک تیبل فاکس بسازم ولی هر کاری کردم و هرچی هم سرچ کردم اخر پیدا نشد و مجبور شدم از همین روش MiRHaDi استفاده کنم
توی کتاب برنامه نویسی بانک اطلاعاتی در دلفی هم همین روش پیشنهاد شده برای ساخت یک فایل بانک اطلاعاتی و در ضمن روش ذخیره و استخراج از فایل منبع ساده است و میتونی هم توی این کتاب و هم سرچ کنی پیدا میکنی :wise1:
موفق باشی

شفیعی
یک شنبه 29 آذر 1383, 23:04 عصر
سلام
خیلی از دوستان به این سوال جواب دادند که از همگی آنها متشکرم . اما مشکل بنده حل نشد
اول اینکه در مورد اعداد اعشاری نمی توان تعریف مانند فاکس پرو نمود
دوما با روشهای بالا DBF ساخته می شود ولی این BDF ها در نرم افزار های دیگر قابل تشخیص نیستند
خلاصه این جوابها مشکل ما را حل نکرد
لطفا دوستان اگر جواب می دهند بطور کامل توضیح دهند

Panje Tala
دوشنبه 30 آذر 1383, 14:01 عصر
با سلام
این کد رو امتحان کن:



procedure tfrm_main.creatlog;
var table:ttable;
begin
try
table:=ttable.Create(self);
table.CachedUpdates:=false;
table.DatabaseName:='test';
table.TableName:=xtbfullname;نام بانک اطلاعاتی که میخواهی ایجاد کنی
table.FieldDefs.Add('f1',ftstring,50,true);
table.FieldDefs.Add('f2',ftstring,15,true);
table.FieldDefs.Add('f3',ftstring,15,true);
table.FieldDefs.Add('f4',ftstring,15,true);
table.FieldDefs.Add('f5',ftstring,15,true);
table.FieldDefs.Add('f6',ftstring,50,true);
table.FieldDefs.Add('f7',ftboolean,0,true);
table.CreateTable;
table.Close;
except
end;


وقبل از آن بایستی alias را برای بانک مورد نظر تعریف کنی :



procedure option_initial;
var i:integer; newitem:tmenuitem;
mylist:tstringlist;
xpath:string;
begin
try
mylist:=tstringlist.Create;
mylist.Clear;
xpath:=xinstallpath+xbankfolder;مسیر بانک اطلاعاتی که میخواهی ایجادکنی
mylist.Add('path='+xpath);
createdirectory(pchar(xpath),nil);
session.AddAlias('test','dbase',mylist);
session.SaveConfigFile;
except
end;

شفیعی
یک شنبه 08 خرداد 1384, 16:44 عصر
سلام
http://www.latiumsoftware.com/en/pascal/0009.php

شفیعی
دوشنبه 27 تیر 1384, 21:14 عصر
سلام
یک زیر برنامه نوشته ام که لیست DBF های موجود در داخل یک شاخه دریافت نمائید و سپس یک فیلد به هر کدام از DBFها اضافه کند و سپس نام فایل را در داخل این فیلد بنویسد ولی پیغام زیر را می دهد
error creating cursor handle
پروسجر زیر پس از اجرا پیغام بالا را می دهد
procedure TFADDFIELDS.Office97Button2Click(Sender: TObject);
var
S1,S:STRING;
T,H:INTEGER;
begin
H:=0;
S:='';
FOR T:=0 TO ListBox2.Count-1 DO
S:=S+ListBox2.Items.Strings[T]+', ';
DELETE(S,Length(S)-1,1);
for T:=0 TO FileListBox1.Count-1 do
begin
Table1.Active :=FALSE;
FileListBox1.ItemIndex:=T;
S1:='ALTER TABLE "'+FileListBox1.FileName+'" Add '+S;
Query1.Active:=FALSE;
Query1.SQL.Clear;
Query1.SQL.Add(S1);
TRY
Query1.Active :=TRUE;
Table1.DatabaseName:=DirectoryListBox1.Directory;
Table1.TableName:=ExtractFileName(FileListBox1.Fil eName); //SR.Name;
S1:=Table1.TableName;
DELETE(S1,POS('.',S1),4);
DELETE(S1,1,1);
Table1.Active :=TRUE;
Table1.First;
Table1.Edit;
Table1[Table1.Fields[Table1.Fields.Count-1].DisplayName]:=S1;
Table1.Post;
except
ShowMessage(' Error File '+FileListBox1.FileName);
H:=H+1;
IF H=3 THEN Exit
END;
end;
ShowMessage('End Of Add Fields');
END;

ali_sadri
پنج شنبه 30 مهر 1388, 19:32 عصر
TableFound,t:boolean;
begin

with TTable.Create(nil) do // create a temporary TTable component
begin
try
{ set properties of the temporary TTable component }
Active := False;
DatabaseName := 'DBDEMOS';
TableName := 'TALBLE1';
TableType := TTFOXPRO;
{ define fields for the new table }
FieldDefs.Clear;
with FieldDefs.AddFieldDef do begin
name := 'FIELD1';
DataType := ftsmallint;
// Size := 1;
Required := False;
end;
with FieldDefs.AddFieldDef do begin
Name := 'FILD2';
DataType := ftfloat ;
Required := False;
end;

// define indexes for the new table
{ IndexDefs.Clear;
with IndexDefs.AddIndexDef do begin
Name := 'FIRST';
Fields := 'checkno';
Options := [ixPrimary];
End;}
TableFound := Exists; // check whether the table already exists
if TableFound then
if MessageDlg('Overwrite existing table liszazad.dbf ?', mtConfirmation, mbYesNoCancel, 0) = mrYes then
TableFound := False;
if not TableFound then
CreateTable; // create the table
finally
Free; // destroy the temporary TTable when done
end;
end;
//end;

navidrajabi90
پنج شنبه 12 بهمن 1391, 10:42 صبح
سلام دوستان
من تابع یا پراسیجر ساخت فایل dbf سازمان تامین اجتماعی رو لازم دارم
هر کدام از دوستان بتونه کمکم کنه ممنون میشم
با تشکر
آدرس ایمیلم:navidrajabi90@Yahoo