PDA

نسخه کامل مشاهده نسخه کامل : کمک در مورد کدنویسی برای Access



mr_mashmash
29-04-2007, 09:44
با سلام دوستان یک مشکلی دارم که هرچه سعی کردم موفق نشدم
یک بانک اطلاعاتی برای آرشیو اسناد تو اکسس 2007 دارم میخوام کدی بنویسم که فیلد کد بصورت اتوماتیک توسط اطلاعاتی که از بقیه فیلدها بدست میاد پر بشه . فرض کنید کد بصورت xx-yy-z-aaa هست و قسمتهای xx و yy و z از روی فیلدهایی که کاربر وارد می کنند بدست می اید ولی برای پیدا کردن aaa چون شماره مسلسله باید در جدول جستجو کنه تا تعداد قبلیهارو پیدا کنه و یکی بهش اضافه کنه تا بدست بیاد.
حالا متاسفانه من هرچی سعی می کنم تا با استفاده از recordset و find یا SELECT این کارو بکنم vb6 از کد ایراد میگیره ، لطفا اساتید زحمت بکشید و کد مربوطه رو از اول که connection باید با ADO یا DAO برقرار بشه راهنمایی کنن چون واقعا تو این مورد مبتدی و تازه کار هستم و با مطالعه کتابهای اموزشی هم نتونستم مطلبو خوب درک و اجرا کنم.:41:

_H2_
29-04-2007, 10:25
سلام
مشکلی نیست و من کمی خنگ هستم!
متوجه نشدم شما از x,y,z,a میخواهید x-y-z-a را بدست بیاورید یا برعکس
شما کدام را دارید و کدارم را میخواهید؟

whisper
29-04-2007, 10:40
خوب راستش منم مثل شما تازه کار هستم ولی چیزی که به ذهنم می رسه اینه لطفا بقیه دوستان هم نظر بدن شاید هم اشتباه باشه ها!!!!!!!!!!
به نظر من aaa رو تو یه فیلد جدا تو بانکت ذخیره کن بعدا موقع نمایش کنار اون فیلد ها نمایش بده
فرض کن اسم فیلد تو بانکت هم aaa هست باید اول بزرگترین رقم رو پیدا کنی!


sql="Select Max(aaa) as aaa From YourTable"
ado.recordsource=sql
ado.refresh
MaxNumber=ado.recordset.getstring
MaxNumber=cstr(MaxNumber)
MaxNumber=MaxNumber+1

حالا باید این مقدار رو به آخرین فیلدت وارد کنی تو بانک راستش دیگه نمی دونم
البته اینم چیزی بود که من از سوال شما فهمیدم

mr_mashmash
29-04-2007, 14:39
انگار بد توضیح دادم . ببینید x,y,z و اینارو بی خیال. فرض کنید میخایم تعداد رکوردهای یک جدول رو که توی یک شرط خاص صدق میکنن رو پیدا کنیم . مثلا میخوام ببینم چندتا رکورد هست که فیلد code اونها با "11-12" یا مثلا "123" شروع میشه. از DAO و ADO یه چیزایی میدونم ولی هرکاری میکنم نمیتونم از Findfirst و Findnext و توابع مربوطه درست استفاده کنم. به نظر خودم تو تعریف connection و مقدار دهی مشکل دارم. حالا اگر از دوستان کسی بتونه کدش رو بنویسه کمک بزرگی کرده. متشکرم

amin_ir
30-04-2007, 03:11
codep=123



Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
dim i as int,counter as int
with cnn
. connectionstring=adodc1.connectionstring
.CursorLocation = adUseClient
.open
end with
Set rst = cnn.Execute("Select code from xxxxxxx;")
rst.Movenext
i=0
While Not rst.EOF
If rst.Fields("code") Like "codep*" Then
i=i+1
end if
rst.movenext
wend


counter=
i

فقط شما می بایستی در adodc1 فرمتون نوع بانک و خود بانک رو تعریف کنید.


اینم مثال دیگه برای پیدا کردن اسامی که با حروفی بین A و D باشند
Sub LikeX()
Dim dbs As Database, rst As Recordset

Set dbs = OpenDatabase("Northwind.mdb")
Set rst = dbs.OpenRecordset("SELECT LastName," & " FirstName FROM Employees" & " WHERE LastName Like '[A-D]*';")
rst.MoveLast


dbs.Close
End Sub

amin_ir
30-04-2007, 03:41
[quote=amin_ir;1047942]
codep=123




Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
dim i as int,counter as int
with cnn
. connectionstring=adodc1.connectionstring
.CursorLocation = adUseClient
.open
end with
Set rst = cnn.Execute("Select code from xxxxxxx;")
rst.Movenext
i=0
While Not rst.EOF
If rst.Fields("code") Like "codep*" Then
i=i+1
end if
rst.movenext
wend

counter=
i

فقط شما می بایستی در adodc1 فرمتون نوع بانک و خود بانک رو تعریف کنید.


اینم مثال دیگه برای پیدا کردن اسامی که با حروفی بین A و D باشند

Sub LikeX()
Dim dbs As Database, rst As Recordset

Set dbs = OpenDatabase("Northwind.mdb")
Set rst = dbs.OpenRecordset("SELECT LastName," & " FirstName FROM Employees" & " WHERE LastName Like '[A-D]*';")
rst.MoveLast


dbs.Close
end sub

amin_ir
30-04-2007, 03:46
[quote=amin_ir;1047971][quote=amin_ir;1047942]
codep=123








Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
dim i as int,counter as int
with cnn
. connectionstring=adodc1.connectionstring
.CursorLocation = adUseClient
.open
end with
Set rst = cnn.Execute("Select code from xxxxxxx;")
rst.Movenext
i=0
While Not rst.EOF
If rst.Fields("code") Like "codep*" Then
i=i+1
end if
rst.movenext
wend


counter=
i

فقط شما می بایستی در adodc1 فرمتون نوع بانک و خود بانک رو تعریف کنید.


اینم مثال دیگه برای پیدا کردن اسامی که با حروفی بین A و D باشند



Sub LikeX()
Dim dbs As Database, rst As Recordset


Set dbs = OpenDatabase("Northwind.mdb")
Set rst = dbs.OpenRecordset("SELECT LastName," & " FirstName FROM Employees" & " WHERE LastName Like '[A-D]*';")
rst.MoveLast



dbs.Close


end sub

amin_ir
30-04-2007, 03:50
علت اینکه چند بار این متن ذخیره شده این بود که می خواستم سعی کنم متن بصورت انگلیسی از چپ به راست مرتب بشه که برنامه خوانا بشه که آخرشم نتونستم این کار رو انجام بدم

mr_mashmash
30-04-2007, 08:04
امین جان ممنون از توجهت

_H2_
30-04-2007, 10:30
انگار بد توضیح دادم . ببینید x,y,z و اینارو بی خیال. فرض کنید میخایم تعداد رکوردهای یک جدول رو که توی یک شرط خاص صدق میکنن رو پیدا کنیم . مثلا میخوام ببینم چندتا رکورد هست که فیلد code اونها با "11-12" یا مثلا "123" شروع میشه. از DAO و ADO یه چیزایی میدونم ولی هرکاری میکنم نمیتونم از Findfirst و Findnext و توابع مربوطه درست استفاده کنم. به نظر خودم تو تعریف connection و مقدار دهی مشکل دارم. حالا اگر از دوستان کسی بتونه کدش رو بنویسه کمک بزرگی کرده. متشکرم

سلام
همین! چه کار وحشتناکی!
نمیدانم خدا دستورات SQL را برای چه خلق کرده!
کافیست دستور SQL زیر را به وسیله یک Command یا Connection در ADO اجرا کنید.
SELECT COUNT(*) FROM tablename WHERE code=123

البته اگر code یک فیلد String باشد، باید بین جفت کتیشن یا تک کتیشن قرار گیرد.
فقط میتوانم کدهای VB8 را بگذارم که احتمالاَ به کارتان نمی آید

mr_mashmash
30-04-2007, 13:35
اره به همین سادگی ولی پیر منو دراورده بود! این جفت کتیشن هم برا خودش داستانی داشت تا درست دربیاد.