PDA

View Full Version : مقاله - کار با ADOX - چگونگی ایجاد بانک اطلاعاتی Access



علیرضا مداح
چهارشنبه 26 اسفند 1383, 11:30 صبح
با سلام .
به دلیل اینکه ADO و ADO.Net امکان ایجاد بانکهای اطلاعاتی Access و تغییر در ساختار آنها را به ما نمیدهند به همین دلیل باید از کتابخانه ADOX استفاده نماییم .

قبل از شروع کار مراحل زیر را دنبال نمایید :
1 – یک WindowsApplication جدید ایجاد نمایید .
2 – بر روی پروژه خود راست کلیک کرده گزینه Add Reference را انتخاب نمایید . در پنجره ظاهر شده وارد برگه COM شده و بر روی گزینه ADO Ext. 2.7 for DDL and Security دوبار کلیک کرده و سپس دکمه OK را بزنید تا کتابخانه ADOX به پروژه شما اضافه گردد .

مرحله اول : ایجاد بانک اطلاعاتی Access


'A'
Dim ConnStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\NewMDB.mdb;" & _
"Jet OLEDB:Engine Type=5"
'B
Dim NewDatabase As New Catalog
'C
NewDatabase.Create(ConnStr)
'D
NewDatabase.let_ActiveConnection(ConnStr)
توضیحات :
A.ابتدا متغیری به نام Connstr تعریف کرده و مقدار آن را برابر ConnectionString دیتابیسی که میخواهیم ایجاد کنیم ، قرار میدهیم .
B.برای ایجاد یک دیتابیس ابتدا یک نمونه از شی ء ADOX.Catalog ایجاد مینماییم .
C.با استفاده از تابع Create و متغیر Connstr بانک مورد نظر را ایجاد مینماییم .
D.توسط متد let_ActiveConnection با بانک اطلاعاتی که ایجاد کردیم ارتباط برقرار میکنیم .

مرحله دوم : ایجاد جدول


'A
Dim PersonalTB As New ADOX.Table
'B
PersonalTB.Name = "Personal"
'C
PersonalTB.Columns.Append("FName", DataTypeEnum.adVarWChar, 20)
PersonalTB.Columns.Append("LName", DataTypeEnum.adVarWChar, 20)
PersonalTB.Columns.Append("Age", DataTypeEnum.adInteger, 2)
PersonalTB.Columns.Append("PersonalID", DataTypeEnum.adInteger, 5)
'D
PersonalTB.Keys.Append("PerSonalID", KeyTypeEnum.adKeyPrimary, "PersonalID")
'E
NewDatabase.Tables.Append(PersonalTB)

A.ابتدا یک نمونه از شی ء ADOX.Table ایجاد مینماییم .
B.نام جدول را توسط پروپرتی Name تنظیم مینماییم .
C.در این مرحله میبایست فیلدهای مورد نظر را به جدول اضافه نماییم : برای اینکار باید از متد Append شی ء Columns استفاده نماییم که به صورت زیر تعریف میشود :


Public Overridable Sub Append(ByVal Item As Object, Optional ByVal Type As ADOX.DataTypeEnum = 202, Optional ByVal DefinedSize As Integer = 0)

- توسط آرگومان Item نام فیلد را توسط یک رشته تنظیم مینماییم .
- توسط آرگومان Type نوع فیلد را توسط یکی از ثابتهای شمارشی OX.DataTypeEnumتنظیم مینماییم .
- توسط آرگومان DefineSize اندازه فیلد را به مقدار مورد نظر محدود مینماییم .
D.سپس توسط متد Append مربوط به شی ء Keys یک کلید اصلی بر روی فیلد PersonalID ایجاد مینماییم .
متد Keys.Append به صورت زیر تعریف میشود :


Public Overridable Sub Append(ByVal Item As Object, Optional ByVal Type As ADOX.KeyTypeEnum = 1, Optional ByVal Column As Object = Nothing, Optional ByVal RelatedTable As String = "", Optional ByVal RelatedColumn As String = "")
- توسط آرگومان Column نام فیلدی را که میخواهیم کلید اصلی بر روی آن قرار گیرد را توسط رشته تعیین مینماییم .

E.در این مرحله توسط متد Append مربوط به شی ء Tables جدول مورد نظر را به بانک اضافه مینماییم .

vbapr2005
پنج شنبه 17 شهریور 1384, 15:24 عصر
ای ول این دیگه آخرشه
خیلی خیلی باحال بود

Semir
جمعه 18 شهریور 1384, 16:15 عصر
سلام


اقا دستت درد نکنه خیلی جالب بود.

ehsan_ansaripoor
جمعه 02 دی 1384, 15:42 عصر
آقا یک دنیا ممنون

skywork
شنبه 04 آذر 1385, 00:58 صبح
با عرض سلام خدمت جناب آقای نصیری

من مشکل ساخت کوئری برای بانک اطلاعاتی دارم و نمی دونم چگونه درست کنم در محیط ASP.NET راهنماییم کنید
درضمن من هر بار که محیط آی اس پ خراب می شه مجبورم دوباره محیط رو باز سازی کنم و بعد مشکل اتصال پیدا میکنه و من مجبورم به طور کامل از دات نت خارج شم ...................
OleDbDataAdapter1.fill(dataset11)

و همچنین محیط رو به گونه ای طراحی کردم که بصورت چند تکس باکس در بالا برای نشان دادن محتویات بانک و چند باتون ابتدا و انتها و بعدی و قبلی قرار دادم ولی وقتی کدی که برای آن باتون نوشتم محتویات رکورد بعدی را نشون نمیده ..... برای باتون
DIM POSITION AS INTEGER
DIM ID AS STRING
POSITION =0
ME.VIEWSTATE("POSITION")=POSITION
ID = DATASET11.TABLES(0).ROWS(POSITION).ITEM("AU_ID")
DATAVIEW1.ROWFILTER ="AU_ID = '" & ID &"'"
TEXTBOX1.DATABINDING()
LABEL3.TEXT=POSITION + &" OF " &DATASET11.TABLES(0).ROWS.COUNT

hamidghasemi
سه شنبه 28 آبان 1387, 11:02 صبح
سلام
از راهنمايي خوبي كه براي ساختن فايل اكسس در وي بي گذاشته بودي خيلي ممنونم . خيلي خوب وكامله . ولي من 2 تا سوال دارم كه مي خواستم از شما بپرسم.
1- حالا كه بانك و table رو ايجاد كرديم چطوري داخل يك for بتوانيم به آن ديتا اضافه كنيم؟
2- مي شود بانك را طوري تعريف كنيم كه اگر در مسيرداده شده قبلاً فايلي وجودداشت روي آن اضافه كنه و پيام خطا نده؟
باز هم از راهنمايي شما ممنونم.

hamidghasemi
سه شنبه 28 آبان 1387, 18:27 عصر
سلام .................................................. ...........كسي از دوستان نيست كه بتونه راهنمايي كنه؟

asheykh
دوشنبه 07 بهمن 1392, 18:07 عصر
با سلام
ضمن تشکر از شما
خیلی عالی بود
بی زحمت کد ها رو با زبان شیرین #C هم بزارید
با تشکر

jeer_jeerak
چهارشنبه 21 مرداد 1394, 20:05 عصر
این روش جالب بود ولی خیلی ضعیف بود
من یه جور دیگه بانک رو میسازم
توی روش شما من فیلد از نوع اتونامبر پیدا نکردم
من سه تا فانکشن میزارم که
اولی بانک خالی رو میسازه
دومی جدول با کلید اصلی اصلی میسازه
سومی جدول با کلید اصلی و کلید فرعی میسازه
aval mikham bank ro besazam

Function DBCreate(ByVal DBSource As String) As Boolean

Dim DB As New ADOX.Catalog
DB.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBSource)
Return True
End Function

intori estefade mishe : DBCreate(FileAddress.mdb) | Behamin Sadegi shoma ye file mdb e khali sakhtin
-------------------------------------------------------------------------------------------------------------------------------------------------------------------

hala ba in fanction ye table be esme persons behesh ezafe mikonim

Function tblPersons(ByVal DBSource As String) As Boolean
Dim Cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBSource)


Dim CMDtblPersons As OleDb.OleDbCommand = New OleDb.OleDbCommand()
CMDtblPersons.Connection = Cn
CMDtblPersons.CommandText = "CREATE TABLE Persons(PID AUTOINCREMENT NOT NULL,FirstName TEXT(50),LastName TEXT(50),CONSTRAINT Persons PRIMARY KEY(pID))"


Cn.Open()
CMDtblPersons.ExecuteNonQuery()
Cn.Close()
Cn.Dispose()
Cn = Nothing
Return True
End Function


intori estefade mishe : tblPersons(FileAddress.mdb) | Behamin Sadegi shoma ye jadval ba 3ta fild sakhtin
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hala jadvale dovomo misazim ke ba jadvale aval ye realation e yek be chand dare

Function tblPerDets(ByVal DBSource As String) As Boolean
Dim Cn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBSource)
Dim cmdPd As New OleDb.OleDbCommand("CREATE TABLE PerDets(pdID AUTOINCREMENT NOT NULL,pID INT NOT NULL,dTitle TEXT(50),CONSTRAINT PerDets_FK FOREIGN KEY (pID) REFERENCES Persons (pID) ,CONSTRAINT PerDets PRIMARY KEY(pdID))", Cn)


Cn.Open()
cmdPd.ExecuteNonQuery()
Cn.Close()
Cn.Dispose()
Cn = Nothing
Return True
End Function

be ravesh e ghabli estefade mishe


fanction e dovom o sevom ye farghe koochooloo dare yani be do ravesh mishe sakht
motmaenam khodetoon baladin
movafagh bashin