PDA

View Full Version : ساخت DBF



شفیعی
سه شنبه 09 تیر 1383, 18:08 عصر
سلام
می خواهیم برنامه ای که بنویسیم که پس از اجرا یک DBF بسازد چگونه می توان توسط دستورات SQL یک DBF بسازیم

بابک زواری
چهارشنبه 10 تیر 1383, 09:39 صبح
اگر شما یک یک DBF داشته باشید (از قبل)‌ میتونید با دستور Select Into این DBF
رو اگر موجود نباشد از روی اون اولی بسازید یعنی اینکه این فیلدها رو با نام خاص
از روی فیلدهای قبلی تولید کنید .
مثلا

Select Code as Code1 , Code as Code2 , Name as Xname Into SS From Bank1

[/code]

شفیعی
چهارشنبه 10 تیر 1383, 20:59 عصر
سلام
می خواهیم از داخل برنامه یک DBF با هر نوع ساختاری که خواستیم بسازیم یعنی در داخل برنامه نوع فیلدها انتخاب شود وبعد بر اساس آن یک DBF ساخته شود

binyaz2003
چهارشنبه 10 تیر 1383, 23:11 عصر
شما از داخل فاکس پرو براحتی می تونید این کار رو با یک خط انجام بدین اما در مورد sql اطلاعی ندارم

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

شفیعی
یک شنبه 28 تیر 1383, 03:59 صبح
سلام
:?:

شفیعی
چهارشنبه 31 تیر 1383, 04:18 صبح
سلام
به نظر دوستان فایلهای پایگاه داده ای از چه نوع باشد بهتر است DBF - اکسس-پاراداکس - ...

binyaz2003
چهارشنبه 31 تیر 1383, 09:47 صبح
شما خودتون بهتر میدونید بهترین نوع بان بانک های sql هست ولی شما به راحتی می تونید باک اکسس از طریق کد نویسی تولید کنید نمونه برنامه هاش همینجا هست

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

شفیعی
چهارشنبه 14 مرداد 1383, 12:05 عصر
سلام
لطفا بنده را راهنمائی نمایید

binyaz2003
چهارشنبه 14 مرداد 1383, 17:34 عصر
فکر نکنم هیچ راهی داشته باشه.

شفیعی
چهارشنبه 14 مرداد 1383, 19:42 عصر
سلام
پس برنامه ای مانند اکسل که می تواند BDF در خروجی داشته باشد چگونه این کار را انجام می دهد

Hossein Bazyan
شنبه 31 مرداد 1383, 13:03 عصر
شفیعی جان سلام
در مورد نوشتن در یک DBF باید ساختار فایلهای DBF را بدانی سبس فایل را ایجاد و در آن بنویسی من قبلا ساختار فایلهای DBF را درآورده بودم اما الان یادم نیست درآوردن ساختار آن خیلی ساده است اکر ساختار را درآوردی میتوانی هر نوع فیلدی را ایجاد حذف و تغییر نام بدی یا رکوردی را اضافه یا کم نمایی امیدوارم موفق باشی

شفیعی
جمعه 01 آبان 1383, 22:33 عصر
سلام
منتظر جواب دوستان هستم

شفیعی
یک شنبه 03 آبان 1383, 04:30 صبح
سلام
با CREATE TABLE می توان فایل ساخت از دستورات SQL در VB چگونه می توان استفاده کرد

vbprogramer
یک شنبه 03 آبان 1383, 09:28 صبح
شفیعی جون ببین این بدردت می خوره ؟ :roll:

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

شفیعی
یک شنبه 03 آبان 1383, 18:35 عصر
سلام
دوست عزیز برنامه ای که من نوشته ام باید بتواند یک فایل DBF بسازد زیرا این فایل بعدا در نرم افزار ARCVIEW مورد استفاده قرار می گیرد و نرم افزار ARCVIEW فقط فایل DBF می گیرد

vbprogramer
دوشنبه 04 آبان 1383, 07:17 صبح
:sorry:

شفیعی
شنبه 16 آبان 1383, 04:13 صبح
سلام
دوستان دیگر نظری ندارند یعنی هیچ راهی نیست

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

binyaz2003
پنج شنبه 21 آبان 1383, 02:52 صبح
یک app تو فاکس پیدا کردم به اسم mdb2dbc که کل بانک اکسس و می گیره و به بانک ویژوال فاکس تبدیل می کنه!
ولی هنوز خودم باهاش کار نکردم چون سرم خیلی شلوغه !
اگر بدردتون می خوره و می تونید ریفاکسش کنید و استفاده براتون بزارم

Hossein Bazyan
جمعه 29 آبان 1383, 16:54 عصر
شفیعی جان
همانطور که قبلا گفتم ساختار فایلهای DBF را در بیار و هر بار خواستی میتوانی به تعداد لازم فایل DBF بسازی با هر نوع و هر مقدار فیلد .
مهم این است که ساختار فایل را بدانی سبس میتوانی فایل را از اول ایجاد کنی اگر خواستی من میتوانم ساختار فایلهای dbf را دربیاورم قبلا این کار را کرده ام و الان خوب یادم نیست تا جایی که یادم هست بایت او تا هشتم آن مال تاریخ و همچنین بایتهای دیگر برای طول فایل و آیا فایل حاوی فیلد memo هست یا خیر و یا اینکه فایل Cdx دارد یا خیر و تا آخر سبس از یک بایت مشخص شروع میشود به نام فیلدها و محتویات آنها .
من همه را به شکل جدول درآورده بودم اگر خواستی من جدول را برات بیدا کنم . موفق باشی

شفیعی
جمعه 29 آبان 1383, 17:17 عصر
سلام


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

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

Hossein Bazyan
جمعه 29 آبان 1383, 17:57 عصر
دوست عزیز من ساختار فایلهای 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 بایت اختلاف .
امیدوارم بتوانی از این ساختار استفاده نمایی من هم چند سال قبل برنامه ای مااند برنامه شما برام پیش آمد و مجبور شدم این ساختار را دربیاورم و خیلی خوب هم از آن استفاده نمودم امیدوارم شما هم موفق باشی . در ضمن ما را هم از کارت بی خبر مگذار
موفق باشی

شفیعی
پنج شنبه 12 آذر 1383, 23:34 عصر
سلام
مرحله اول کار نمایش لیست فیلدهای فایلهای DBF


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

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

Hossein Bazyan
جمعه 20 آذر 1383, 16:11 عصر
دستت درد نکند آقای شفیعی کار را راحت کردی ::نوشتن::

شفیعی
شنبه 21 آذر 1383, 05:13 صبح
سلام
اگر ممکن اسنت دوست عزیز در مورد مطلب زیر بیشتر توضیح دهید


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

Hossein Bazyan
دوشنبه 23 آذر 1383, 17:54 عصر
دوست عزیز سلام

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


[/list]