ورود

View Full Version : نحوه دستيابي فيلد هاي پايگاه داده



kiss_my_l0ve
پنج شنبه 19 اسفند 1389, 22:20 عصر
سلام دوستان
ميخواستم مقدار مثلا فيلد تاريخ ركورد جاري رو در يك متغير قرار بدم هر كاري ميكنم نميشه

ALI = Adodc1.Recordset.Fields("Date")
اين كديه كه من نوشتم راستي من فقط اطلاعات ركورد جاري رو ميخوام نه تمام ركورد ها رو
فكر كنم بايد ارايه درست كنم ولي من همه رو نميخوام

M.T.P
شنبه 21 اسفند 1389, 18:56 عصر
شما اول باید کرسر رو به رکورد مورد نظرتون منتقل کنید ، بعد با دستور فوق مقدار فیلد رو به متغیرتون نسبت بدید.
ضمنا پیغام خطا رو عنوان نکردید.

kiss_my_l0ve
شنبه 21 اسفند 1389, 21:31 عصر
همون نمي دونستم چجوري كرسر رو به ركورد مورد نظر انتقال بدم
اينم پيغام خطاي كه ميداد
Run-Time Error 91
Object Variable Or With block variable not set
مرسي

aminaltavista
یک شنبه 22 اسفند 1389, 09:47 صبح
همون نمي دونستم چجوري كرسر رو به ركورد مورد نظر انتقال بدم
اينم پيغام خطاي كه ميداد
Run-Time Error 91
Object Variable Or With block variable not set
مرسي
دوست عزیز اگه می خوای به رکورد بعد بروی از دستور
adodc1.recordset.move
استفاده کن.

mohsen.j1990
یک شنبه 22 اسفند 1389, 14:38 عصر
salam baraye harekat dadane cursur mituni az code zir estefade koni
"adodc1.recordset.abslouteposition=5

mohsen.j1990
یک شنبه 22 اسفند 1389, 14:40 عصر
adodc1.recordet.AbsolutePosition = 6
adodc1.recordet ("Field")

kiss_my_l0ve
چهارشنبه 25 اسفند 1389, 13:48 عصر
همون پيغام خطاي قبلي رو ميده

egproje
چهارشنبه 25 اسفند 1389, 13:56 عصر
دوست عزیز کد شما درست بود
فقط قسمت آخرش رو اشتباه نوشتی
باید اینجوری بنویسی
Ali=Adodc1.Recordset.Fields!date

M_Maskout
پنج شنبه 26 اسفند 1389, 10:35 صبح
Object Variable Or With block variable not set
مرسي
قاعدتاً قسمتی از اشیاء مورد استفاده هنوز درست Set نشده.
به این کد توجه کنین:

Dim adodc1 As New ADODB
و یا
Dim adodc1 As ADODB
Set adodc1 = New ADODB

شما در زمان رونوشت برداری از کلاس‌ها، باید از کلمه کلیدی New استفاده کنین. این کار باعث تخصیص حافظه لازم به نمونه ساخته شده از اون کلاس می‌شه.
همین کار رو باید با RecordSet هم انجام بدین
با فرض نوشتن یکی از دو حالت بالا، در ادامه داریم:

adodc1.RecordSet = Set New RecordSet

بعد هم سایر اقدامات (اختصاص جدول به RecordSet، باز کردن جدول و ...)
در این صورت اصولاً دیگه نباید چنین پیامی رو ببینید.
مشکل شما از حرکت بین رکوردها نیست. اگه این خطا رو می‌بینید، مشکل از جای دیگه‌ای هست. چون به محض باز شدن دیتابیس، شما می‌تویند به اطلاعات اولین رکورد دسترسی داشته باشین. (ممکنه رکورد جاری، رکورد مورد نظر شما نباشه، ولی به هر حال خطای ساختاری به شما نمی‌ده)
اگر این توضیحات به درد شما نمی‌خوره، پیشنهاد می‌دم حداقل کل روتینی که قرار به دیتابیس دسترسی پیدا کنه رو در اینجا بذارین تا بشه بیشتر کمکتون کرد.

kiss_my_l0ve
پنج شنبه 26 اسفند 1389, 22:14 عصر
Private Sub Form_Load()
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb;"
Adodc1.RecordSource = "SELECT * FROM register Where date like '" & Age & "%'"
Adodc1.Refresh
End Sub
Public Function Age()
Dim b As String
b = ShamsiDiff(Shamsi(), Adodc1.Recordset.Fields("date"))
If b >= 365 Then
ALI = Adodc1.Recordset.Fields("Date")
End If
End Function
اينم روتين
اين حركتي كه گفتي زدم نشد
از اين خط و

b = ShamsiDiff(Shamsi(), Adodc1.Recordset.Fields("date"))
البته من از اين كد قبلا استفاده كردم درسته
و اين خط

ALI = Adodc1.Recordset.Fields("Date")
پيغام خطا ميده

M_Maskout
شنبه 28 اسفند 1389, 10:37 صبح
به خط زیر توجه کنین




Adodc1.RecordSource = "SELECT * FROM register Where date like '" & Age & "%'"

تو این خط شما می‌خواین جدولی رو که هنوز باز نشده، با شرط خاصی باز کنین:

Where date like '" & Age & "%'"

این شرط از تابعی استفاده می‌کنه که داخل بدنه اون از اطلاعات جدول فوق الذکر (که هنوز باز نشده) نتیجه گیری انجام می‌ده!
و خطا هم به همین خاطر پیش میاد.
حالا راه حل اینه که شما اول جدول رو بدون قید و شرط باز کنین، بعد با 67674 کردن اون شرط رو به جدول اعمال کنین.
یه موضوع مهم:
شما دارین از تابع Age استفاده می‌کنین ولی این تابع هیچ مقداری بر نمی‌گردونه. این یعنی اینکه حتی اگر برنامه اجرا بشه هم، شرط گذاشته شده (حتی تو 67674) باز هم هیچ کاری نمی‌کنه.
به هرحال اگر براتون مهمه که بی جهت کلی رکورد رو بافر نکنین (اهمیت سرعت دسترسی که اصولاً روی دسترسی‌های از راه دور خودشو نشون می‌ده) بهتره یه Query با پارامتر درست کنین، بعد در زمان اجرای برنامه پارامتر رو به Query انتقال بدین.
یه چیزی شبیه به این:
SELECT * FROM register WHERE Date Like [Age];
با فرض اینکه Query رو با نام QR ذخیره کرده باشین و مقدار دلخواه "1389/12/28" مد نظر باشه، تو برنامه داریم:
Adodc1.CommandType = adCmdStoredProc
Adodc1.RecordSource = "QR '1389/12/28'"
با این کار دیگه احتیاجی به 67674 نیست.
توضیح: کلمه 67674 رو به خاطر محدودیت‌های قانونی کشور بصورت تصویر تو پست گذاشتم

kiss_my_l0ve
شنبه 28 اسفند 1389, 14:53 عصر
مرسي داداشي تو كجا بودي ببينم جواب ميده