PDA

View Full Version : حرفه ای: نوشتن در فایل DBF



fazel-d
جمعه 25 مهر 1393, 01:35 صبح
با سلام

طبق ساختاری که فایل DBF داره و هدفی که من از نوشتن در این فایل دارم ، ایجاد لیست بیمه هست.
نحوه خواندن از فایل DBF رو چند وقت پیش انجام داده بودم که به زبان C# بود.

اما با توجه به انعطاف دلفی سعی دارم تا برنامه خودم رو به این زبان توسعه بدم.
یعنی می خوام در فایل بنویسم.!!!
آیا کد کامل برای نوشتن وجود داره؟؟؟
اینکه طبق ساختار این نوع فایلها باید از RECORD ای از اطلاعات رو به صورت رکورد جدول در فایلل بنویسم. آیا چنین امکانی وجود داره؟

این مطلب هم خدمتتون عرض کنم که قبل از ایجاد تاپیک جدید، تالار رو زیرو پا گذاشتم که نتیجه بخش نبود.. برای من
ممنون

khoshblagh
جمعه 25 مهر 1393, 05:23 صبح
با سلام
برای لیست بیمه نیازی به اینکار نیست . کافی است که خروجی را از طریق برنامه ای مثل فست ریپورت به چاپگر فرستاد. اما اگر منظور شما تهیه دیسکت بیمه باشد که ساختار جدول آن dbf میباشد شما میتوانید یکی از 2 راه زیر را انتخاب نمائید:
1- میتوان محاسبات را در یک فایل اکسس ثبت نمود و سپس نتیجه را به جدولهای BDE بورلند انتقال داد. در حقیقت BDE با فایلهای dbf سازگاری دارد . لذا در آن 2 جدول مربوط به دیسکت بیمه را با آن میتوان ساخت.
2- یا اینکه میتوان نتیجه محاسبات حقوق را به برنامه تهیه دیسکت بیمه سازمان تامین اجتماعی(که در کنار فایل اجرایی برنامه نصب شده است ) فرستاد و نهایتا از آنجا نسبت به تهیه دیسکت بیمه اقدام نمود.

tdkhakpur
جمعه 25 مهر 1393, 20:21 عصر
این مطلب هم خدمتتون عرض کنم که قبل از ایجاد تاپیک جدید، تالار رو زیرو پا گذاشتم که نتیجه بخش نبود.. برای من



سلام
به نظر من بهتره از فاکس پرو جهش کنید به دیتا بیسهای مدرن و پیشرفته مخصوصا mysql.
اما اگه کار خاصی مد نظر دارید میشه dll کار با dbf رو برای دلفی نوشت.
البته محدوده دسترسی رو باید مشخص کنید یعنی فیلدهای بانک توی چه محدوده هایی هستن.

fazel-d
شنبه 26 مهر 1393, 19:56 عصر
1- میتوان محاسبات را در یک فایل اکسس ثبت نمود و سپس با اتصال آن به جدولهای BDE بورلند نتیجه را به آن انتقال داد. در حقیقت BDE با فایلهای dbf سازگاری دارد . لذا در آن 2 جدول مربوط به دیسکت بیمه را با آن میتوان ساخت.
.
بله هدفم همينه كه بتونم خروجي كارم رو در فايل DBF بنويسم.
حالا طبق فرمايش جنابعالي كه مي شه فايل DBF رو به اجزاي BDE وصل كرد، آيا مثل اتصال فايل اكسس هست؟ و با توجه به اينكه فونت محتواي درون DBF مختص تامين اجتماعي «ايران سيستم» هست آيا BDE اين امكان رو فراهم مي كنه يا بايد اطلاعات ديتابيسم رو با «ايران سيستم» نگه دارم و يا شما راه حل بهتري داريد؟

یوسف زالی
شنبه 26 مهر 1393, 21:09 عصر
سلام.
برای اتصال به فایل DBF با کامپوننت TTable به سادگی این کار شدنیه.
برای فونت ایران سیستم هم کانورتور هایی وجود داره که این کار رو به سادگی انجام می ده.
یک سری کامپوننت های رایگان هم هست که محتوای گرید رو به فایل مورد نظر اکسپورت می کنه ولی تضمینی برای انتقال درستش برای فارسی نیست.
توصیه می کنم این سایت رو هم ببینید.
http://www.wotsit.org/list.asp?al=D

درکل فرمت چندان سختی نداره و خودتون هم می تونید براش کانورتور بنویسید.

khoshblagh
شنبه 26 مهر 1393, 21:39 عصر
بله هدفم همينه كه بتونم خروجي كارم رو در فايل DBF بنويسم.
حالا طبق فرمايش جنابعالي كه مي شه فايل DBF رو به اجزاي BDE وصل كرد، آيا مثل اتصال فايل اكسس هست؟ و با توجه به اينكه فونت محتواي درون DBF مختص تامين اجتماعي «ايران سيستم» هست آيا BDE اين امكان رو فراهم مي كنه يا بايد اطلاعات ديتابيسم رو با «ايران سيستم» نگه دارم و يا شما راه حل بهتري داريد؟
من اینکار اینطور انجام دادم :
1 - دو تا جدول دقیقا با ساختار جدولهای بیمه د ر بانک اکسس ایجاد مینمائیم.
2- دو تا جدول مانند بالا ولی با BDE ایجاد مینمائیم.
3- بعد از محاسبات حقوق اطلاعات مورد نیاز را در جدولهای اکسس وارد نموده . میتوانید برای کنترلی نهایی اطلاعات این دو جدول را با دی گرید نمایش دهید
4 - با یک حلقه رکوردهای جدول اطلاعات کارگران را از جدول اکسس خوانده و آنها را در جدول متناظر که با BDE ساخته شده منتقل مینمائیم.
5 - برای جدول کارفرما که فقط یک رکورد دارد همین کار را انجام میدهیم.
حالا اگر داده های ثبت شده در جدولهای BDE را در دیبی گرید نمایش دهید، اطلاعات غیر عددی حروف لاتین میباشند . ولی اگر این دو جدول اخیر را به سازمان بیمه تحویل دهید در آنجا بدرستی نمایش داده میشود . همین.

fazel-d
شنبه 26 مهر 1393, 23:09 عصر
من اینکار اینطور انجام دادم :
1 - دو تا جدول دقیقا با ساختار جدولهای بیمه د ر بانک اکسس ایجاد مینمائیم.
2- دو تا جدول مانند بالا ولی با BDE ایجاد مینمائیم.
3- بعد از محاسبات حقوق اطلاعات مورد نیاز را در جدولهای اکسس وارد نموده . میتوانید برای کنترلی نهایی اطلاعات این دو جدول را با دی گرید نمایش دهید
4 - با یک حلقه رکوردهای جدول اطلاعات کارگران را از جدول اکسس خوانده و آنها را در جدول متناظر که با BDE ساخته شده منتقل مینمائیم.
5 - برای جدول کارفرما که فقط یک رکورد دارد همین کار را انجام میدهیم.
حالا اگر داده های ثبت شده در جدولهای BDE را در دیبی گرید نمایش دهید، اطلاعات غیر عددی حروف لاتین میباشند . ولی اگر این دو جدول اخیر را به سازمان بیمه تحویل دهید در آنجا بدرستی نمایش داده میشود . همین.

از ساختار اين فايلها باخبرم.. و شركت هاو دستگاه هاي مختلفي اين فايلها رو برامون ميارن كه بعضياشون كه با FOXPRO تحت داس باز مي كني، ركوردهاي جورواجور دارن كه احتمالا از رويكرد شما استفاده كردند.... اما اونايي كه با ليست ديسك فايلها رو پر كردن به همان منوال فارسي قابل رويت هستند.

1- براي ساخت جداول با فيلدهاي متناظر با dskkar , dskwor در اكسس آيا الزامي وجود داره؟
2-قبل از نوشتن با BDE آيا نيازي به كاورت به فرمت ايران سيستم نيست؟ اگه جواب مثبته كه اين موضوع با DLL اي كه خوده برنامه بيمه داره مرتفعه. CONVERT.DLL
3- و در پايان نمونه كدي از اين رويكردتون داريد؟

fazel-d
سه شنبه 29 مهر 1393, 23:59 عصر
با جستجويي كه در اينترنت انجام دادم اما موفق به كسب اطلاعات دقيقي از استفاده BDE براي DBF فايل ها نشدم
فكر كنم خودم دستي اطلاعات رو داخل فايل بريزم بهتر باشه... حداقلش كدم native خواهد بود

khoshblagh
چهارشنبه 30 مهر 1393, 07:37 صبح
از ساختار اين فايلها باخبرم.. و شركت هاو دستگاه هاي مختلفي اين فايلها رو برامون ميارن كه بعضياشون كه با FOXPRO تحت داس باز مي كني، ركوردهاي جورواجور دارن كه احتمالا از رويكرد شما استفاده كردند.... اما اونايي كه با ليست ديسك فايلها رو پر كردن به همان منوال فارسي قابل رويت هستند.

1- براي ساخت جداول با فيلدهاي متناظر با dskkar , dskwor در اكسس آيا الزامي وجود داره؟
2-قبل از نوشتن با BDE آيا نيازي به كاورت به فرمت ايران سيستم نيست؟ اگه جواب مثبته كه اين موضوع با DLL اي كه خوده برنامه بيمه داره مرتفعه. CONVERT.DLL
3- و در پايان نمونه كدي از اين رويكردتون داريد؟

با سلام
1 - الزامی نیست ولی باعث روانی کار میشود. من از این روش استفاده نمودم.
2- نیازی به کانورت نیست . ولی در رابطه با CONVERT.DLL من طرز استفاده از آن را بلد نیستم.در صورت امکان استفاده از آنرا شرح دهید.
3- من خیلی وقت پیش از دو حلقه برای خواندن داده ها از فایل اکسس و نوشتن در فایل BDE استفاده نمودم. ولی اگر بخواهم آنرا بهینه نمایم ؛ اینبار از یک عبارت sql استفاده خوام کرد.

fazel-d
یک شنبه 04 آبان 1393, 19:04 عصر
ن خیلی وقت پیش از دو حلقه برای خواندن داده ها از فایل اکسس و نوشتن در فایل BDE استفاده نمودم. ولی اگر بخواهم آنرا بهینه نمایم ؛ اینبار از یک عبارت sql استفاده خوام کرد.
ميشه بفرماييد كه چطور به DBF وصل شديد؟ و چطور درون اون نوشتيد؟
ممنون

khoshblagh
یک شنبه 04 آبان 1393, 21:14 عصر
ن خیلی وقت پیش از دو حلقه برای خواندن داده ها از فایل اکسس و نوشتن در فایل BDE استفاده نمودم. ولی اگر بخواهم آنرا بهینه نمایم ؛ اینبار از یک عبارت sql استفاده خوام کرد.
ميشه بفرماييد كه چطور به DBF وصل شديد؟ و چطور درون اون نوشتيد؟
ممنون

procedure ConvertDSKWOR00;
begin
frmBimehDisket.TableDsWorDos.Open;
frmBimehDisket.TableDsWorDos.EmptyTable;
frmBimehDisket.TableDSKWOR00.Open;
with frmBimehDisket.TableDSKWOR00 do
begin
DisableControls;
try
First;
while not Eof do
begin
frmBimehDisket.TableDsWorDos.Append;
frmBimehDisket.TableDsWorDosDSW_ID.Value:=frmBimeh Disket.TableDSKWOR00DSW_ID.Value;
frmBimehDisket.TableDsWorDosDSW_YY.Value:=frmBimeh Disket.TableDSKWOR00DSW_YY.Value;
frmBimehDisket.TableDsWorDosDSW_MM.Value:=frmBimeh Disket.TableDSKWOR00DSW_MM.Value;
frmBimehDisket.TableDsWorDosDSW_LISTNO.Value:=frmB imehDisket.TableDSKWOR00DSW_LISTNO.Value;
frmBimehDisket.TableDsWorDosDSW_ID1.Value:=frmBime hDisket.TableDSKWOR00DSW_ID1.Value;
frmBimehDisket.TableDsWorDosDSW_FNAME.Value:=Unico deToIranSystem(frmBimehDisket.TableDSKWOR00DSW_FNA ME.Value);
frmBimehDisket.TableDsWorDosDSW_LNAME.Value:=Unico deToIranSystem(frmBimehDisket.TableDSKWOR00DSW_LNA ME.Value);
frmBimehDisket.TableDsWorDosDSW_DNAME.Value:=Unico deToIranSystem(frmBimehDisket.TableDSKWOR00DSW_DNA ME.Value);
frmBimehDisket.TableDsWorDosDSW_IDNO.Value:=frmBim ehDisket.TableDSKWOR00DSW_IDNO.Value;
frmBimehDisket.TableDsWorDosDSW_IDPLC.Value:=frmBi mehDisket.TableDSKWOR00DSW_IDPLC.Value;
frmBimehDisket.TableDsWorDosDSW_IDNO.Value:=frmBim ehDisket.TableDSKWOR00DSW_IDNO.Value;
frmBimehDisket.TableDsWorDosDSW_BDATE.Value:=frmBi mehDisket.TableDSKWOR00DSW_bdate.Value;
frmBimehDisket.TableDsWorDosDSW_IDATE.Value:=frmBi mehDisket.TableDSKWOR00DSW_IDATE.Value;
frmBimehDisket.TableDsWorDosDSW_SEX.Value:=Unicode ToIranSystem(frmBimehDisket.TableDSKWOR00DSW_SEX.V alue);
frmBimehDisket.TableDsWorDosDSW_NAT.Value:=Unicode ToIranSystem(frmBimehDisket.TableDSKWOR00DSW_NAT.V alue);
frmBimehDisket.TableDsWorDosDSW_OCP.Value:=Unicode ToIranSystem(frmBimehDisket.TableDSKWOR00DSW_OCP.V alue);
frmBimehDisket.TableDsWorDosDSW_SDATE.Value:=frmBi mehDisket.TableDSKWOR00DSW_SDATE.Value;
frmBimehDisket.TableDsWorDosDSW_EDATE.Value:=frmBi mehDisket.TableDSKWOR00DSW_EDATE.Value;
frmBimehDisket.TableDsWorDosDSW_DD.Value:=frmBimeh Disket.TableDSKWOR00DSW_DD.Value;
frmBimehDisket.TableDsWorDosDSW_ROOZ.Value:=frmBim ehDisket.tableDSKWOR00DSW_ROOZ.Value;
frmBimehDisket.TableDsWorDosDSW_PRATE .Value:=frmBimehDisket.TableDSKWOR00DSW_PRATE.Valu e;
frmBimehDisket.TableDsWorDosDSW_JOB.Value:=frmBime hDisket.TableDSKWOR00DSW_JOB.Value;
frmBimehDisket.TableDsWorDosDSW_BIME.Value:=frmBim ehDisket.TableDSKWOR00DSW_BIME.Value ;
frmBimehDisket.TableDsWorDosDSW_TOTL.Value:=frmBim ehDisket.TableDSKWOR00DSW_TOTL.Value ;
frmBimehDisket.TableDsWorDosDSW_MASH.Value:=frmBim ehDisket.TableDSKWOR00DSW_MASH.Value ;
frmBimehDisket.TableDsWorDosDSW_MAH.Value:=frmBime hDisket.TableDSKWOR00DSW_MAH.Value ;
frmBimehDisket.TableDsWorDosDSW_MAZ.Value:=frmBime hDisket.TableDSKWOR00DSW_MAZ.Value ;
frmBimehDisket.TableDsWorDosPER_NATCOD.Value:=frmB imehDisket.TableDSKWOR00PER_NATCOD.Value ;

// frmBimehDisket.TableDsWorDSW_PYM.Value:=frmBimehDi sket.TableDSKWOR00DSW_PYM.Value;
frmBimehDisket.TableDsWorDos.Post;
Next;
end;
finally
EnableControls;
frmBimehDisket.TableDSKWOR00.Close;
frmBimehDisket.TableDsWORDos.Close;
end;
end;
end;


ضمنا Table را از تب Bde انتخاب و نوع آنرا ttfoxpro انتخاب نماید . یکی برای ریز کارگران و یکی برای کارفرما.
همچنین هیچگونه اتصالی به فایلهای bde نیازی نیست، لذا پست شماره 2 را اصلاح نمودم.

fazel-d
دوشنبه 05 آبان 1393, 16:39 عصر
procedure ConvertDSKWOR00;
اين طور كه من فهميدم شما از فايل پيش ساخته DSKKAR و DSKWOR استفاده نكرديد و ساخت اين فايلها در همين روال انجام ميشه.. درسته؟

و در مورد خط زير



frmBimehDisket.TableDsWorDosDSW_ID.Value:=frmBimeh Disket.TableDSKWOR00DSW_ID.Value;

مي شه توضيح بديد كه جداول TableDsWorDos و TableDSKWOR00 چگونه تعريف شدن؟ و منظور از اين خط كد چيست؟
فايل در كجاست و كجا نوشته ميشه؟
اگه نمونه كد برام بذاريد ممنون ميشم و به كلي سوال پايان ميده...
ممنون

khoshblagh
چهارشنبه 07 آبان 1393, 10:57 صبح
اين طور كه من فهميدم شما از فايل پيش ساخته DSKKAR و DSKWOR استفاده نكرديد و ساخت اين فايلها در همين روال انجام ميشه.. درسته؟

و در مورد خط زير



مي شه توضيح بديد كه جداول TableDsWorDos و TableDSKWOR00 چگونه تعريف شدن؟ و منظور از اين خط كد چيست؟
فايل در كجاست و كجا نوشته ميشه؟
اگه نمونه كد برام بذاريد ممنون ميشم و به كلي سوال پايان ميده...
ممنون

با سلام
کافیه دو تا جدول dbf مربوط به بیمه را در همان شاخه برنامه کپی نموده و 2 کنترل ttable تب bde را روی فرم برنامه قرار داده و سپس هر کدام از این 2 کنترل جداگانه به یکی از جدولهای گفته شده وصل مینمائید. و نوع جدولها هم در ttable هم ttfoxspro تعیین میکنید. و سپس از کدهایی شبیه پست 11 استفاده مینمائید.

fazel-d
چهارشنبه 07 آبان 1393, 20:46 عصر
با سلام
کافیه دو تا جدول dbf مربوط به بیمه را در همان شاخه برنامه کپی نموده و 2 کنترل ttable تب bde را روی فرم برنامه قرار داده و سپس هر کدام از این 2 کنترل جداگانه به یکی از جدولهای گفته شده وصل مینمائید. و نوع جدولها هم در ttable هم ttfoxspro تعیین میکنید. و سپس از کدهایی شبیه پست 11 استفاده مینمائید.

بسیار ممنون و متشکر بخاطر لطفی که به بنده داشتید و به سوالم پاسخ دادید.
هدف من هم توسعه یه برنامه تنظیم لیست جامع هست که کارفرماها بتونن بهتر و راحتر از برنامه خوده تامین اجتماعی لیست بیمه رو تنظیم کنن و به زودی اولین نسخه شو بر روی برنامه‌نویس قرار می دم
منتها باز هم به کمک شما نیاز مندم چرا که من از دلفی برای اولین باره که دارم استفاده می کنم و قبل از این هم تخصصم بر روی سی شارپ بود.
باز هم ممنون

fazel-d
چهارشنبه 12 فروردین 1394, 17:15 عصر
با سلام و تبریک سال نو

در پروژه ضمیمه شده، فایل DSKWOR رو به BDE TAble بایند کردم و در زمان دیباگینگ وقتی خاصیت tbDOS.active برابر با true است مشکلی نیست و محتوا رو نشون می ده ولی... وقتی برنامه رو run می کنم و در زمان run time پیغام زیر رو می ده

class edbengineerror with message 'cannot load driver

میشه شما هم امتحان کنید. و بگید مشکل از کجاست؟
ممنون

++++++++++++++++++++++++++++++++++++++++
البته مشکل از این بود که datasource رو به table بایند کرده بودم و با true بودن خاصیت active مربوط به table این مشکل به وجود می اومد.
می بایست اتصال datasource با table قطع باشه.

fazel-d
چهارشنبه 12 فروردین 1394, 20:42 عصر
این یه نمونه برای دوستان

کار این برنامه صرفا درج یک رکورد در DBF هست.
برای نوشتارهای فارسی از فایل convert.dll استفاده شده که می بایست این فایل ابتدا رجیستر شود. کد های لازم برای رجیستر کردن در برنامه وجود داره و خودش این کارو می کنه
چنانچه جواب نداد در
run>>regsvr convert.dll رو اجرا کنید
و بعد برنامه رو اجرا کنید

دلفــي
شنبه 15 فروردین 1394, 08:53 صبح
http://barnamenevis.org/showthread.php?231528-%D9%86%D8%AD%D9%88%D9%87-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D9%88%DB%8C%D9%86%D8%AF%D9%88%D8%B2-%D8%A8%D9%87-%D8%AF%D8%A7%D8%B3-%D8%AF%DB%8C%D8%B3%DA%A9%D8%AA-%D8%A8%DB%8C%D9%85%D9%87