PDA

View Full Version : سوال: ساختار رکورد سورس در vb



reza2371
پنج شنبه 01 شهریور 1397, 17:14 عصر
سلام خدمت اساتید محترم
ضمن خداقوت و خسته نباشید
ببخشید ساختار رکورد سورس در vb چطور هست؟
یه نمونه دیدم میخوام "like" را در قسمت شرط بردارم و اگه بخوام در قسمت تکست خود فرم برای جستجو ستاره بذارم چکار باید بکنم؟
اگه دوتا شرط داشته باشم؟
همچنین نحوه قراردادن sort چطوری هست؟


Me.RecordSource = "SELECT [Qasli].[ID], [Qasli].[nameshabake], [Qasli].[namerosta], [Qasli].[aghlam1], [Qasli].[tedad1] FROM [Qasli]" & "where [aghlam1]like" & "('*" & T6 & "*')"

Mehr@ban
جمعه 02 شهریور 1397, 20:40 عصر
سلام

یک پیشنهاد دارم تا درصد خطای شما در بخش sql به حداقل برسه
کوئری خودتون رو در محیط طراحی کوئری ایجاد کنید، بعد در حالت sql کد موجود را در محیط vba یا vb استفاده کنید

reza2371
شنبه 03 شهریور 1397, 01:24 صبح
سلام

یک پیشنهاد دارم تا درصد خطای شما در بخش sql به حداقل برسه
کوئری خودتون رو در محیط طراحی کوئری ایجاد کنید، بعد در حالت sql کد موجود را در محیط vba یا vb استفاده کنید


خیلی ممنونم اوکی شد. مرسی
ببخشید یه سوال دیگه هم دارم اگر ممکنه پاسخ بدید

من با دستورات زیر توی محیط اکسس قسمت vb بانک اطلاعاتم باز میکنم و دستور ذخیره میدم. حالا کدی رو که بانک اسکیوال باز میکنه رامیخوام. ممنونم از شما


Dim db As Database
Dim rst As Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("table1")
rst.AddNew

rst.Fields("tarikh") = Slash((Me.tarikh.Value))

rst.Update
rst.Close

amirzazadeh
شنبه 03 شهریور 1397, 20:07 عصر
سلام
اين يه نمونه كد با ado هستش اميدوارم به دردتون بخوره:



Dim Cn As ADODB.Connection
Dim rs, rs1 As ADODB.Recordset
Dim Cnxn As ADODB.Connection
Dim strCnxn As String

Set Cnxn = New ADODB.Connection

strCnxn = "Provider='SQLOLEDB';Data Source='.';" & _
"Initial Catalog='DBName';User ID='sa';Password='DBPass';"
Cnxn.Open strCnxn

Set rs = New ADODB.Recordset

rs.CursorLocation = adUseClient
rs.Open "select * from prescribe", Cnxn, adOpenDynamic, adLockOptimistic, 1

rs.AddNew
.
.
.
rs.Update

reza2371
یک شنبه 04 شهریور 1397, 00:34 صبح
سلام
اين يه نمونه كد با ado هستش اميدوارم به دردتون بخوره:



Dim Cn As ADODB.Connection
Dim rs, rs1 As ADODB.Recordset
Dim Cnxn As ADODB.Connection
Dim strCnxn As String

Set Cnxn = New ADODB.Connection

strCnxn = "Provider='SQLOLEDB';Data Source='.';" & _
"Initial Catalog='DBName';User ID='sa';Password='DBPass';"
Cnxn.Open strCnxn

Set rs = New ADODB.Recordset

rs.CursorLocation = adUseClient
rs.Open "select * from prescribe", Cnxn, adOpenDynamic, adLockOptimistic, 1

rs.AddNew
.
.
.
rs.Update


سلام، من خیلی دنبال چنین سورسی بودم؛ ممنونم از توجه شما
با توجه به اینکه من مبتدی هستم چند تا سوال دیگه هم دارم اگر امکان داره راهنماییم کنید
1- اگر در یک فرم هم دستور ذخیره در بانک اکسس باشه و هم ذخیره در بانک sql امکان پذیر هست؟
2- اگر بخوام یه فیلد ( که شناسه مشخص داره) را در بانک sql را ویرایش کنم کد فوق چه تغییری میکنه؟
3- اگر تعداد رکورد بیش از یکی باشه و بخوام همه را یکجا در بانک sql ذخیره کنم چکار باید بکنم؟

amirzazadeh
یک شنبه 04 شهریور 1397, 11:18 صبح
سلام
در مورد سئوال 1 جواب مثبته ولي برا خودم سئواله كه چرا از دو تا ديتابيس مختلف در برنامه استفاده ميشه؟
2- براي ويرايش به جاي اين كد


rs.Open "select * from prescribe", Cnxn, adOpenDynamic, adLockOptimistic, 1

rs.AddNew


از اين نمونه كد استفاده ميشه كه شما بايد شرط خودتون رو بعد از where جايگزين كنيد.


rs.Open "select * from prescribe where ser=" & prc, Cnxn, adOpenDynamic, adLockOptimistic, 1

براي ذخيره همزمان چند ركورد يا بايد از لوپ (For Next) استفاده بشه يا از كوئري هاي اينسرت كه با اجراي كامندهاي sql عملي هست.
..............................

reza2371
یک شنبه 04 شهریور 1397, 15:20 عصر
با یک نرم افزار کار میکنم که تحت قالب sql هست (البته کار من نیست) که یک سری کمبود هایی داره؛ بعضی از موارد را میشه از طریق کد نویسی تو بانک خود برنامه ذخیره یا ویرایش... کرد

حالا من اومدم با اکسس نواقص را رفع کردم و چون بلد نبودم از بانک اکسس استفاده کردم. از شما هم میخوام منو تو این زمینه راهنمایی کنید
البته از توجهات قبلی کمال سپاسگذاری را دارم

reza2371
سه شنبه 06 شهریور 1397, 10:42 صبح
سلام
من این کد را گذاشتم ولی ارور میده
امکان داره یه نمونه برام بذارید؟؟

148757

reza2371
سه شنبه 06 شهریور 1397, 13:15 عصر
مشکل قبلی اوکی شد
یه مشکل دیگه اینو چطور حل کنم؟
دیتابیس اسکیوال هم یوزر و پسورد نداره

148760

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



rs.AddNew

rs.Fields("codea") = Slash((Me.Text1.Value))
rs.Fields("fish_num") = Slash((Me.Text3.Value))

amirzazadeh
سه شنبه 06 شهریور 1397, 22:44 عصر
Provider=sqloledb;Data Source=myServerAddress;Initial Catalog=myDataBase;
Integrated Security=SSPI;

اگه بانك اطلاعاتي پسود نداره از اين رشته براي اتصال استفاده كنيد

reza2371
سه شنبه 06 شهریور 1397, 23:30 عصر
شرمنده باز هم درست نشد



Dim Cn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim Cnxn As ADODB.Connection
Dim strCnxn As String

Set Cnxn = New ADODB.Connection

strCnxn = "Provider=sqloledb;Data Source=myServerAddress;Initial Catalog=myDataBase; Integrated Security=SSPI"
Cnxn.Open strCnxn

Set rst = New ADODB.Recordset

rst.CursorLocation = adUseClient
rst.Open "select * from dbo.tbl_gheramat_ozviat", Cnxn, adOpenDynamic, adLockOptimistic, 1


rst.AddNew


rst.Update

amirzazadeh
چهارشنبه 07 شهریور 1397, 11:59 صبح
سلام.شما بايد در رشته اتصال نام كامپيوتر سرور خودتون رو به جاي "ماي سرور آدرس" جايگزين كنيد و همينطور در قسمت "اينيشيال كاتوگ" نام ديتا بيس خودتون را بنويسيد.
...............
موفق باشيد

reza2371
چهارشنبه 07 شهریور 1397, 15:20 عصر
به صورت زیر نوشتم اما متاسفنه بازم خطا میده



strCnxn = " Provider = sqloledb;Data Source = '.\ SQLEXPRESS' ; Initial Catalog = 'mainP' ; Integrated Security = SSPI "



من نام سرور را از کجا باید بردارم؟
مثل شکل زیر صحیحه؟
148768

amirzazadeh
پنج شنبه 08 شهریور 1397, 19:13 عصر
سلام کد رو درست نوشتید فقط به جای . باید نام کامپیوتر شما وارد بشه که با راست کلیک روی ایکون مای کامپیوتر یا مای پی سی در دسکتاپ نشان داده میشه.

یه چیزی مثل این strCnxn = "Provider='SQLOLEDB';Data Source='am\SQLEXPRESS';" & _
"Initial Catalog='totia';Integrated Security=SSPI;" که am نام کامپیوتر هست


strCnxn = "Provider='SQLOLEDB';Data Source='am\SQLEXPRESS';" & _
"Initial Catalog='totia';Integrated Security=SSPI;"
......................

موفق باشید

reza2371
جمعه 09 شهریور 1397, 11:02 صبح
سلام
خیلی تشکر میکنم از زحمات و توجهات شما
نام کامپیوتر را از همون جایی ک فرمودید هم وارد کردم ولی هنوز همون خطا پست شماره 9 را داد_نام سیستم تغییر دادم و اوکی شد
بازم ممنونم از الطاف شما

یه سوال دیگه و اون اینکه اگر بخوام دستوری باشه که به صورت اتوماتیک نام سیستم پیدا کنه و جایگذاری بکنه چکار باید بکنم؟؟؟؟؟؟؟

reza2371
جمعه 09 شهریور 1397, 20:32 عصر
سلام
در مورد سئوال 1 جواب مثبته ولي برا خودم سئواله كه چرا از دو تا ديتابيس مختلف در برنامه استفاده ميشه؟
2- براي ويرايش به جاي اين كد


rs.Open "select * from prescribe", Cnxn, adOpenDynamic, adLockOptimistic, 1

rs.AddNew


از اين نمونه كد استفاده ميشه كه شما بايد شرط خودتون رو بعد از where جايگزين كنيد.


rs.Open "select * from prescribe where ser=" & prc, Cnxn, adOpenDynamic, adLockOptimistic, 1

براي ذخيره همزمان چند ركورد يا بايد از لوپ (For Next) استفاده بشه يا از كوئري هاي اينسرت كه با اجراي كامندهاي sql عملي هست.
..............................

سلام
جهت ویرایش از دستوری که دادید استفاده کردم ولی خطا object required داد.
در خود sql وقتی میخوام ویرایش بزنم از دستور update استفاده میکنم ایا اینجا هم باید از اون دستور استفاده بکنم؟؟ اگه جواب مثبت هست ساختار و شیوه اون به چه نحوی هست؟
ساختار دستور حذف چطور هست؟
ممنونم از شما که وقت میذارید

amirzazadeh
شنبه 10 شهریور 1397, 11:18 صبح
ساختار دستور حذف چطور هست؟

Set rs1 = New ADODB.Recordset
rs1.Open "select * from subpsc where scser=" & prc, Cn, adOpenDynamic, adLockOptimistic, 1
sql = "delete from subpsc where scser=" & prc
DoCmd.RunSQL (sql)

reza2371
شنبه 10 شهریور 1397, 16:55 عصر
ممنونم از پاسختون
لطف میکنید برای دو سوال دیگه هم منو راهنمایی کنید

amirzazadeh
یک شنبه 11 شهریور 1397, 07:27 صبح
ممنونم از پاسختون
لطف میکنید برای دو سوال دیگه هم منو راهنمایی کنید

يك نمونه كد با لوپ براي ويرايش:

Set rs1 = New ADODB.Recordset
rs1.Open "select * from subpsc where scser=" & prc, Cn, adOpenDynamic, adLockOptimistic, 1



For intcurrentrow = 0 To Me.List6.ListCount - 1

rs1!scser = prc
rs1!Dcode = Me.List6.Column(9, intcurrentrow)
rs1!price = Me.List6.Column(5, intcurrentrow)
.
.
.
rs1.Update

Next intcurrentrow
MsgBox "داده ويرايش شد" & " " & CInt(Right(rs!ser, 4)), vbApplicationModal, "ويرايش"
Set rs = Nothing

Set rs1 = Nothin

reza2371
یک شنبه 11 شهریور 1397, 16:56 عصر
سلام
بابت زحمت هایی ک دادم تشکر ویژه میکنم از شما
من خیلی وارد نیستم . نتونستم کد ویرایش و حذف را درست بزنم و اجرا بشه
prc مقداری هست ک برای شرط درنظر میگیرید؟؟
شرط را چطور در ساختار قرار میدید؟؟

اسم تیبل من dbo.tbl_gheramat_ozviat هست. فیلد شرط هم codea هست
ممنونم از الطاف شما

amirzazadeh
سه شنبه 13 شهریور 1397, 08:49 صبح
كد شما براي حذف بايد يه چيزي شبيه به اين باشه:


Set rs1 = New ADODB.Recordset
rs1.Open "select * from dbo.tbl_gheramat_ozviat where codea=" & مقدار, Cn, adOpenDynamic, adLockOptimistic, 1

sql = "delete from dbo.tbl_gheramat_ozviat where codea=" & مقدار
DoCmd.RunSQL (sql)

reza2371
چهارشنبه 14 شهریور 1397, 18:30 عصر
نحوه نوشتن شرط با " هست؟ میشه توضیح بدید؟
شرمنده من مبتدی هستم

m.roustaei
دوشنبه 23 مهر 1397, 09:25 صبح
سلام.
نکته اول اینه که راه ساده تری برای ارتباط با SQL وجود داره و اون استفاده از ODBC هست. از طریق اون می تونین جداول یا View های SQL رو وارد برنامه ACCESS خودتون بکنین و همانند جداول خود ACCESS با اونها رفتار کنین.
موضوع دوم در خصوص دستورات T-SQL هست. دستوراتی که شما مقابل =sql می نویسین یک Text است و از نوع String. بدیهی است که لازمه این دستورات درون دو عدد (") به شکل "Statement" قرار بگیرن. حالا اگه بخواهید داخل یک String از یک متغیر استفاده کنین که براساس شرایط بهش مقدار بدین و داخل دستور SQL اون مقدار قرار بگییره، لازمه از یک ساختار استفاده کنین که شبیه دستوراتی است که قبلا برای شما توضیح داده شده:


"SELECT * FROM " & Var1 & " WHERE TableName = '" & Var2 & "' Order By ID"

در دستور بالا متغیر اول با نام Var1 از نوع عددی است پس برای قرار دادن آن داخل یک دستور T-SQL لازم است ابتدا کد مان را به سه قسمت تقسیم کنیم، دو قسمت اول و سوم همچنان Text هستند و لازم است در کدام داخل دو عدد (") قرار بگیرند و قسمت میانی که یک متغیر است به همان صورت نوشته می شود. حال برای اینکه این سه قسمت را به هم متصل کنیم، لازم است از دو علامت & استفاده کنیم.
در متغیر دوم (Var2) یک تفاوت وجود دارد و این است که نوع این متغیر از نوع String است و در نتیجه مقدار آن در دستورات T-SQL لازم است بین دو علامت (') قرار گیرد. به همین دلیل به انتهای رشته قبل از متغیر یک علامت (') و به ابتدای رشته بعد از متغیر نیز یک علامت (') اضافه می کنیم.

شایان ذکر است در دستور بالا مقدار Var1 برابر نام جدولی است که می خواهیم دستور را روی آن اجرا کنیم و متغیر Var2 مربوط به شرطی است که می خواهیم روی دستور ما اعمال شود.

m.roustaei
دوشنبه 23 مهر 1397, 09:33 صبح
سلام مجدد.
من برای بررسی و تغییر روی جداول در محیط VBA از ساختار زیر استفاده می کنم. ممکنه به درد دوستان هم بخوره:



Dim DBS As Database
Dim RES1 As Recordset

Set DBS = CurrentDb
"Set RES1 = DBS.OpenRecordset("TableName)

With RES1
.MoveFirst
Do While Not .EOF
.Edit
دستورات
.Update
.MoveNext
Loop
End With

RES1.Close


به جای TableName لازمه نام جدول و یا Query مورد نیاز خودتون رو بنویسین و از دستورات Edit. و Update. زمانی استفاده می کنین که می خواهید ویرایشی روی جدول مربوطه انجام دهید. در صورتیکه بخواهید یک رکورد جدید رو به جدول اضافه کنین هم می تونین به جای Edit. از AddNew. استفاده کنین.