PDA

View Full Version : سوال: نوع اتصال به ديتابيس !!!



amiralex
شنبه 15 مهر 1391, 11:12 صبح
سلام
ببخشيد من يه سوال داشتم
در واقع يه تازه كارم تو VB6 و سوالم اينه كه من از طريق ويزارد خود برنامه يه فرم ساختم و يك ديتابيس اكسس به فرمم وصل كردم و خوب مشكل اينجا نيست.
در مرحله اول كه از طريق ويزارد انتخاب كردم گزينه Single Document Intreface (SDI) انتخاب كردم و بعد ديتابيس اكسس و بعد Single Record و از بين سه تا گزينه ADO Data Control
ADO Code
Class و من گزينه ADO Code رو انتخاب كردم. اولي و رو انتخاب ميكردم بعد تمام شدن مراحل ويزارد برنامه اجرا نميشد و ارور ميداد.

حالا ميخوام بدونم نوع اتصالم به ديتابيس چيه؟
چون براي كارهايي مثل ديتا ريپورت و فيلتر اون با مشكل مواجهم چون دوستاني اكثرا به Adodc1 اشاره كردن.نوع adodb هم نميدونم هست يا نه.
لطفا راهنمايي كنيد

محسن واژدی
شنبه 15 مهر 1391, 12:11 عصر
سلام علیکم
provider باید jet-engine باشه (البته هنوز مطمئن نیستم) در صورت امکان سورس را هم ضمیمه کنید

موفق باشید

amiralex
شنبه 15 مهر 1391, 12:22 عصر
سلام ممنونم از پاسختون من به علت حجم بالا نميتونم آپ كنم ولي بخشي اولي كدهاي فرمم كه فكر ميكنم ميشه از اونجا فهميد رو براتون ميذارم


Option Explicit

Dim WithEvents adoPrimaryRS As Recordset
Dim mbChangedByCode As Boolean
Dim mvBookMark As Variant
Dim mbEditFlag As Boolean
Dim mbAddNewFlag As Boolean
Dim mbDataChanged As Boolean

-------------------------------------------------------------------------

Private Sub Form_Load()
Dim db As Connection
Set db = New Connection
db.CursorLocation = adUseClient
db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\f-Database.mdb"
Set adoPrimaryRS = New Recordset
adoPrimaryRS.Open "select Codshobe,Data,Datajari,DVaresei,MAlpha,Marhale,MDi git,Nameshobe,Tedad from Disketbank Order by Data", db, adOpenStatic, adLockOptimistic
Set Me.Text1.DataSource = adoPrimaryRS
Set Me.Text2.DataSource = adoPrimaryRS

Dim oText As TextBox
'Bind the text boxes to the data provider
For Each oText In Me.txtFields
Set oText.DataSource = adoPrimaryRS
Next

mbDataChanged = False
End Sub

amiralex
شنبه 15 مهر 1391, 13:17 عصر
لطفا يكي از دوستان جواب بدن.

محسن واژدی
شنبه 15 مهر 1391, 13:43 عصر
سلام علیکم
همانطور که از connection-string پیداست نوع اتصال Microsoft Jet DB هست

amiralex
شنبه 15 مهر 1391, 14:04 عصر
ممنونم از شما

سوال ديگه ايي دارم

درواقع هدفم از سوال بالا اين بود كه من بخوام data Report رو محدود كنم به همون اطلاعاتي كه در همون فرم نشون ميده و نه ديتابيس. چطور ميتونم اين كار رو كنم؟
دوستان گفتم بايد Adodc1 استفاده كني ولي من اين كلمه رو تو اون كدي كه گفتن بكار ميبرم ارور ميده

چي كار بايد بكنم ؟

محسن واژدی
شنبه 15 مهر 1391, 14:27 عصر
برای اینکه تنها محتویات یک رکورد خاص چاپ بشه از WHERE استفاده میکنیم، برای مثال query زیر اطلاعات رکوردی با ID=100 را چاپ میکند:


Dim sSQL$
sSQL$ = "SELECT * FROM Tbl1 WHERE ID=100"

amiralex
شنبه 15 مهر 1391, 15:13 عصر
آقاي واژئي ممنونم از كمهاتون فقط چون تازه كارم من رو فرمم يه دكمه گذاشتم و اين كد رو براي چاپ فرم استفاده ميكنم
With frmDisketbank
Set Disketbank.DataSource = adoPrimaryRS
Disketbank.WindowState = 2
Disketbank.Show
End With

سوالم اينه كدي كه شما گفتيد رو كجا بايد بذارم ؟

محسن واژدی
شنبه 15 مهر 1391, 15:53 عصر
آقاي واژئي ممنونم از كمهاتون فقط چون تازه كارم من رو فرمم يه دكمه گذاشتم و اين كد رو براي چاپ فرم استفاده ميكنم
With frmDisketbank
Set Disketbank.DataSource = adoPrimaryRS
Disketbank.WindowState = 2
Disketbank.Show
End With

سوالم اينه كدي كه شما گفتيد رو كجا بايد بذارم ؟

خواهش میکنم، کد زیر رو بررسی کنید:
Private Sub Command1_Click()

Dim Cn As New ADODB.Connection
Dim Rs As New ADODB.Recordset

With Rs
Cn.ConnectionString = adoPrimaryRS.ConnectionString
Cn.CursorLocation = adUseClient
Cn.Open
.Open "SELECT * FROM Table1 WHERE ID=" & adoPrimaryRS.Recordset.Fields!ID, Cn
Set Disketbank.DataSource = Rs
Disketbank.WindowState = 2
Disketbank.Show
End With

End Sub

نام جدول را جایگزین Table1 کنید
موفق باشید

amiralex
شنبه 15 مهر 1391, 16:16 عصر
آقا محسن ممنونم ازتون ولي اين كد رو طبق گفتتون گذاشتم ولي تو اين قسمت كه رنگي كردم ارور ميده و ارورشم اينه:

Dim Cn As New ADODB.Connection
Dim Rs As New ADODB.Recordset

With Rs
Cn.ConnectionString = adoPrimaryRS.ConnectionString
Cn.CursorLocation = adUseClient
Cn.Open
.Open "SELECT * FROM Table1 WHERE ID=" & adoPrimaryRS.Recordset.Fields!ID, Cn
Set Disketbank.DataSource = Rs
Disketbank.WindowState = 2
Disketbank.Show
End With


ارورشم اينه

Method Or data Member not Found


چي كار بايد بكنم؟

MohammadGh2011
شنبه 15 مهر 1391, 16:20 عصر
سلام عليکم

attention:


براي تشکر کردن از دکمه تشکر استفاده کنيد
لطفا کدهاتون رو در تگ مخصوص به کد قرار دهيد تا اساتيد بهتر راهنمايي کنند



موفق باشيد دوست گرامي

محسن واژدی
شنبه 15 مهر 1391, 16:29 عصر
آقا محسن ممنونم ازتون ولي اين كد رو طبق گفتتون گذاشتم ولي تو اين قسمت كه رنگي كردم ارور ميده و ارورشم اينه:

Dim Cn As New ADODB.Connection
Dim Rs As New ADODB.Recordset

With Rs
Cn.ConnectionString = adoPrimaryRS.ConnectionString
Cn.CursorLocation = adUseClient
Cn.Open
.Open "SELECT * FROM Table1 WHERE ID=" & adoPrimaryRS.Recordset.Fields!ID, Cn
Set Disketbank.DataSource = Rs
Disketbank.WindowState = 2
Disketbank.Show
End With


ارورشم اينه

Method Or data Member not Found


چي كار بايد بكنم؟

احتمالا از DAO استفاده میکنید، کد زیر بررسی کنید:
Private Sub Command1_Click()
Dim Cn, Rs
Set Cn = CreateObject("ADODB.Connection")
Set Rs = CreateObject("ADODB.Recordset")

With Rs
Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & adoPrimaryRS.DatabaseName & ";Persist Security Info=False"
Cn.CursorLocation = adUseClient
Cn.Open
.Open "SELECT * FROM Table1 WHERE ID=" & adoPrimaryRS.Recordset.Fields!ID, Cn
Set Disketbank.DataSource = Rs
Disketbank.WindowState = 2
Disketbank.Show
End With

End Sub

موفق باشید

amiralex
شنبه 15 مهر 1391, 17:02 عصر
آقا محسن ممنونم از شما واقعا متشكرم اما نميدونم از شانس بد منه آخرشم درست از آب در نمياد و ارور ميده تو اين قسمت همون ارور قبلي رو ميده

در خط 9 اين كلمه رو ارور ميده adoPrimaryRS.Recordset

Dim Cn, Rs
Set Cn = CreateObject("ADODB.Connection")
Set Rs = CreateObject("ADODB.Recordset")

With Rs
Cn.ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\f-Database.mdb" & ";Persist Security Info=False"
Cn.CursorLocation = adUseClient
Cn.Open
.Open "SELECT * FROM Disketbank WHERE Data=" & adoPrimaryRS.Recordset.Fields!Data, Cn
Set Disketbank.DataSource = Rs
Disketbank.WindowState = 2
Disketbank.Show
End With


چيكار بايد بكنم؟:گریه:

محسن واژدی
شنبه 15 مهر 1391, 17:08 عصر
میبخشید اما مگه از چه کنترلی استفاده کردید؟ هم ADO و هم DAO این property رو دارن
در صورت لزوم متن خطا رو هم ضمیمه کنید

amiralex
شنبه 15 مهر 1391, 17:12 عصر
ارورشم اينه

Method Or data Member not Found

راستش نميدونم. لطفا كمك كنيد.

اگه بتونم فايل و ضميمه ميكنم

ممنونم ازتون

amiralex
شنبه 15 مهر 1391, 17:30 عصر
اقا محسن من فايلمو قرار دادم علاوه بر مشكل بالا من يه مشكل ديگه هم دارم وقتي چند ركورد و با زدن دكمه حذف ميخوام حذف كنم وقتي به ركورد اول ميرسه بعد از حذف ارور ميده
ممنون ميشم مشكلات و برطرف كنيد

محسن واژدی
شنبه 15 مهر 1391, 22:45 عصر
سلام علیکم
ضمیمه را بررسی کنین

این خطا بخاطر این بود که adoPrimaryRS یک شی حقیقی نبود، یک اعلان از نوع Recordset بود

با اضافه شدن کنترل ADO به فرم و تغییر نام آن به adoPrimaryRS عملا" اعلان adoPrimaryRS، دکمه های پایین فرم که نقش ADO را ایفا میکردند و همینطور کدهای تعریف شده در این دکمه ها و برخی از دستورات مرتبط با آنها اضافی تشخیص داده شدند و نتیجه رأی شورای یک نفره این بود که این کدها و اشیاء، زیادی بوده و بایستی سریعا" حذف شوند :لبخند:
همینطور برای گزارش گیری و جلوگیری از برخی از تداخل ها همیشه سعی کنین یک فیلد AutoNumber در جدول داشته باشید. در بانک F-DataBase هم با اضافه شدن فیلد ID از این نوع مشکل حل شد

موفق باشید

amiralex
یک شنبه 16 مهر 1391, 08:57 صبح
آقا محسن ممنونم از شما به خاطر كمكتون

اما من وقتي دكمه جديد رو براي ثبت ركورد جديد ميزنم ارور ميده.
اون فيلد ID روهم به Data تغيير دادم
بازهم تو متد دكمه )(جديد)Add و CmdUpdate (ذخيره) ارور ميده

چي كار بايد بكنم؟

محسن واژدی
یک شنبه 16 مهر 1391, 10:48 صبح
سلام علیکم
مجددا ضمیمه پست 17 بررسی کنید

موفق باشید