# Native Code > برنامه نویسی در 6 VB > مطالب مرتبط با بانکهای اطلاعاتی در VB6 >  ساخت DBF

## شفیعی

سلام 
می خواهیم برنامه ای که بنویسیم که پس از اجرا یک DBF بسازد چگونه می توان توسط دستورات SQL یک DBF بسازیم

----------


## بابک زواری

اگر شما یک یک DBF داشته باشید (از قبل)‌ میتونید با دستور Select Into این DBF
رو اگر موجود نباشد از روی اون اولی بسازید یعنی اینکه این فیلدها رو با نام خاص 
از روی فیلدهای قبلی تولید کنید  .
مثلا 
Select Code as Code1 , Code as Code2 , Name as Xname Into SS From Bank1

[/code]

----------


## شفیعی

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

----------


## binyaz2003

شما از داخل فاکس پرو براحتی می تونید این کار رو با یک خط انجام بدین اما در مورد sql  اطلاعی ندارم

----------


## شفیعی

سلام 
دوست عزیز این کار می خواهم در VB انجام دهم

----------


## شفیعی

سلام 
 :?:

----------


## شفیعی

سلام 
به نظر دوستان فایلهای پایگاه داده ای از چه نوع باشد بهتر است DBF - اکسس-پاراداکس - ...

----------


## binyaz2003

شما خودتون بهتر میدونید بهترین نوع بان بانک های sql  هست ولی شما به راحتی می تونید باک اکسس از طریق کد نویسی تولید کنید نمونه برنامه هاش همینجا هست

----------


## شفیعی

سلام 
یک برنامه نوشته ا م که در آن تعدادی عدد را در یک لیست باکس اضافه می کنم می خواهیم اعداد موجود در این لیست باکس را در داخل یک DBF ذخیره کنیم به شکلی که برنامه بتواند با گرفتن اسم و مشخصات فیلدها DBF را ساخته و اطلاعات را در آن ذخیره کند

----------


## شفیعی

سلام 
لطفا بنده را راهنمائی نمایید

----------


## binyaz2003

فکر نکنم هیچ راهی داشته باشه.

----------


## شفیعی

سلام 
پس برنامه ای مانند اکسل که می تواند BDF در خروجی داشته باشد چگونه این کار را انجام می دهد

----------


## Hossein Bazyan

شفیعی جان سلام 
در مورد نوشتن در یک DBF باید ساختار فایلهای DBF را بدانی سبس فایل را ایجاد و در آن بنویسی من قبلا ساختار فایلهای DBF  را درآورده بودم اما الان یادم نیست درآوردن ساختار آن خیلی ساده است اکر ساختار را درآوردی میتوانی هر نوع فیلدی را ایجاد حذف و تغییر نام بدی یا رکوردی را اضافه یا کم نمایی امیدوارم موفق باشی

----------


## شفیعی

سلام 
منتظر جواب دوستان هستم

----------


## شفیعی

سلام 
با CREATE TABLE می توان فایل ساخت از دستورات SQL در VB چگونه می توان استفاده کرد

----------


## vbprogramer

شفیعی جون ببین این بدردت می خوره ؟  :roll: 

البته فکر نمی کنم ... :(

----------


## شفیعی

سلام 
دوست عزیز برنامه ای که من نوشته ام باید بتواند یک فایل DBF بسازد زیرا این فایل بعدا در نرم افزار ARCVIEW مورد استفاده قرار می گیرد و نرم افزار ARCVIEW فقط فایل DBF می گیرد

----------


## vbprogramer

:sorry:

----------


## شفیعی

سلام 
دوستان دیگر نظری ندارند یعنی هیچ راهی نیست

----------


## MM_Mofidi

شفیعی جان ساختار فایل dbf ثابت است یا هربار فرق میکند؟
اگر ثابت است یک نمونه بزار یک برنامه برای ساختن ساختارش بهت بدم.
اگر ساختارش ثابت نیست یا هربار میخواهی با اطلاعات بسازیش پیشنهاد میکنم که یک فایل mdbبا اطلاعاتت بسازی بعد با کد نویسی(البته در foxpro-چون خیلی راحتتره) اونو تبدیل به dbf کنی
امتحان کن اگر نشد بگو یکاری واست بکنم. :wise1:

----------


## binyaz2003

یک app  تو فاکس پیدا کردم به اسم mdb2dbc  که کل بانک اکسس و می گیره و به بانک ویژوال فاکس تبدیل می کنه!
ولی هنوز خودم باهاش کار نکردم چون سرم خیلی شلوغه !
اگر بدردتون می خوره و می تونید ریفاکسش کنید و استفاده   براتون بزارم

----------


## Hossein Bazyan

شفیعی جان 
همانطور که قبلا گفتم ساختار فایلهای DBF را در بیار و هر بار خواستی میتوانی به تعداد لازم فایل DBF بسازی با هر نوع و هر مقدار فیلد .
مهم این است که ساختار فایل را بدانی سبس میتوانی فایل را از اول ایجاد کنی اگر خواستی من میتوانم ساختار فایلهای dbf را دربیاورم قبلا این کار را کرده ام و الان خوب یادم نیست تا جایی که یادم هست بایت او تا هشتم آن مال تاریخ و همچنین بایتهای دیگر برای طول فایل و آیا فایل حاوی فیلد memo هست یا خیر و یا اینکه فایل Cdx دارد یا خیر و تا آخر سبس از یک بایت مشخص شروع میشود به نام فیلدها و محتویات آنها . 
 من همه را به شکل جدول درآورده بودم اگر خواستی من جدول را برات بیدا کنم . موفق باشی

----------


## شفیعی

سلام 



> من همه را به شکل جدول درآورده بودم اگر خواستی من جدول را برات بیدا کنم . موفق باشی


دوست عزیز اگر زحمتی نیست جدول را برایم ارسال کن خیلی ممنون :oops:

----------


## Hossein Bazyan

دوست عزیز من ساختار فایلهای DBF را در اینجا مینویسم امیدوارم به دردت بخورد . شما میتوانی توسط هر برنامه ای این فایلها را بسازی 
فایلهای DBF از دو قسمت درست شده اند . یک قسمت Header  یا ساختار فیلدها و یک قسمت اطلاعات یا ساختار رکوردها 

اما Header یا ساختار فیلدها 
از بایت اول فایل شروع میشود تا بایت 32 فایل . این قسمت همیشه ثابت است و من تک تک بایتها را توضیح میدهم .

بایت   |  توضیحات 
   0   | اگر این بایت3باشدفایل دارای Memo هست و اگر 245 باشد فیلد Memo ندارد
        |-----------------------------------------------
  1    | سال ایجاد  یا ویرایش فایل 
   2   |  ماه ایجاد  یا ویرایش فایل 
   3   |  روز ایجاد یا ویرایش فایل 
        |-----------------------------------------------
  5   | تعداد رکوردهای موجود در بانک که از فرمول زیر حساب میشود
  6   | (3 ^256 × بایت 8) + (3 ^256 × بایت 7) + (1 ^256 × بایت 6) + (0 ^256  7   |    × بایت 5)                                    
  8   |
        |-----------------------------------------------
  9   |
 10  | انتهای تعریف رکوردها با کاراکتر 13 ( همیشه کاراکتر 13 است )
       |-----------------------------------------------
 11  | 
 12  | طول یک رکورد 
       |-----------------------------------------------
   .  |           .               .              .
  .   |           .               .              .
  .   |           .               .              .
  .   |           .               .              .
  .   |           .               .              .
       |-----------------------------------------------
  29 | اگر CDX داشته باشد برابر یک در غیر اینصورت برابر صفر است 
      |-----------------------------------------------
  30 |
      |-----------------------------------------------
  31 |
       |-----------------------------------------------
  32 |
       |-----------------------------------------------

حال میرسیم به ساختار رکوردها 

هر رکورد در فایهای DBF دارای 17 بایت میباشد نقطه شروع و ختم هر رکورد از همدیگر به تعداد 32 بایت فاصله دارد یعنی نقطه شروع رکورد اول از بایت 33 و رکورد دوم از بایت 65 و سوم از 97 و الی آخر است 
حال به ساختار دقت کنید 
از بایت 33 تا 42  نام فیلد اول است 
بایت 44 نوع فیلد را مشخص میکند 
از بایت 45 تا 46 نقطه شروع فیلد اول است یعنی در بانک محتویات فیلد اول از کدام نقطه شروع میشود . 
بایت 49 طول رکورد است 
بایت 50 تعداد اعشار برای فیلدهای اعشاری است 
حال این ساختار ادامه داده میشود با 32 بایت تفاضل یعنی 

از بایت 65 تا 74  نام فیلد دوم است 
بایت 76 نوع فیلد دوم را مشخص میکند 
از بایت 77 تا 78 نقطه شروع فیلد دوم است 
بایت 81 طول رکورد است 
بایت 82 تعداد اعشار برای فیلدهای اعشاری است 
و به تعداد فیلدها این سری تکرار میشود با 32 بایت اختلاف .
امیدوارم بتوانی از این ساختار استفاده نمایی من هم چند سال قبل برنامه ای مااند برنامه شما برام پیش آمد و مجبور شدم این ساختار را دربیاورم و خیلی خوب هم از آن استفاده نمودم امیدوارم شما هم موفق باشی . در ضمن ما را هم از کارت بی خبر مگذار 
موفق باشی

----------


## شفیعی

سلام 
مرحله اول کار نمایش لیست فیلدهای فایلهای DBF

Dim arrByte&#40;&#41; As Byte
Private Sub Form_Load&#40;&#41;
ListView1.View = lvwReport
ListView1.ColumnHeaders.Add , , "ردیف "
ListView1.ColumnHeaders.Add , , "نام فیلد"
ListView1.ColumnHeaders.Add , , "نوع فیلد"
ListView1.ColumnHeaders.Add , , "سایز"
ListView1.ColumnHeaders.Add , , "تعداد اعشار"
End Sub
Private Sub VIEWDBF_Click&#40;&#41;
  FOPEN.ShowOpen
  If FOPEN.FileName = "" Then
        Exit Sub
    End If
    mHandle = FreeFile
    Open FOPEN.FileName For Binary As #mHandle
    MFILESIZE = LOF&#40;mHandle&#41;
    If MFILESIZE = 0 Then
         Close mHandle
         MsgBox "Empty file"
         Exit Sub
    End If
    ListView1.ListItems.Clear
    Label1.Caption = FOPEN.FileName
    Label2.Caption = Str&#40;MFILESIZE&#41;
    ReDim arrByte&#40;1 To MFILESIZE&#41;
    Get #mHandle, , arrByte
    Close mHandle
    H = 0
    Index = 1
    For F = 1 To 200
    H = H + 32
    S = ""
    ListView1.ListItems.Add Index, , Index
    For T = 1 To 9
    If arrByte&#40;H + T&#41; &lt;> 0 Then
    S = S + Chr&#40;arrByte&#40;H + T&#41;&#41;
    End If
    Next '' NAME FIELDS
    ListView1.ListItems&#40;Index&#41;.SubItems&#40;1&  #41; = S
    S = Chr&#40;arrByte&#40;H + 12&#41;&#41; '' TYPE FIELDS
    ListView1.ListItems&#40;Index&#41;.SubItems&#40;2&  #41; = S
    S = arrByte&#40;H + 17&#41; '' SIZE FIELDS
    ListView1.ListItems&#40;Index&#41;.SubItems&#40;3&  #41; = S
    S = arrByte&#40;H + 18&#41; '' SIZE DECIMAL
    ListView1.ListItems&#40;Index&#41;.SubItems&#40;4&  #41; = S
    Index = Index + 1
    If arrByte&#40;H + 33&#41; = 13 Then Exit For
    Next
End Sub

با تشکر از زحمات آقای Hossein Bazyan

----------


## Hossein Bazyan

دستت درد نکند آقای شفیعی کار را راحت کردی  ::نوشتن::

----------


## شفیعی

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

5 | تعداد رکوردهای موجود در بانک که از فرمول زیر حساب میشود 
6 | &#40;3 ^256 × بایت 8&#41; + &#40;3 ^256 × بایت 7&#41; + &#40;1 ^256 × بایت 6&#41; + &#40;0 ^256 7 | × بایت 5&#41;

----------


## Hossein Bazyan

دوست عزیز سلام

برنامه ها برای ذخیره اعداد از این استفاده می کنند . اگر گفته میشود Integer دو بایت اشغال میکند و ما عدد 12560 را بخواهیم ذخیره کنیم اگر مانند رشته ذخیره کنیم که 5 بایت اشغال میکند اما ابن عدد از نوع Integer است و باید 2 یابت بخواهد و شیوه ار به این شکل است که عدد را بر 256 تقسیم میکنند مقسوم علیه را میگویند بایت   بر ارزش و باقیمانده را بایت کم ارزش میگویند مثلا برای عدد فوق میشود 49 بایت بر ارزش و 16 بایت کم ارزش حال این عدد در فایل به شکل کاراکتر های 49 و 16 ذخیره میشود . برای به دست آوردن عدد هم به شیوه زیر عمل میکنند:
بایت بر ارزش را در 256 ضرب و با بایت کم ارزش جع میکنند یعنی 49*256+16
حال در فایلهای DBF برای تعداد روردها هم از متغیر Long  استفاده شده که عدد را در 8 بایت ذخیره میکند و از همین شیوه استفاده میکند که فرمول داده شده هم برای به دست آوردن تعداد رکردهای موجود در بانک است .
امیدوارم که منظورم را فهمیده باشی . موفق باشید

[/list]

----------

