PDA

View Full Version : معادل کدهای اکسس برای SQL



mhamedm2008
شنبه 25 مرداد 1393, 00:33 صبح
با سلام خدمت دوستان
من چمد سالی هست که اینانجمن رو دنبال نی کنم.از اکسس هیچی نمو دونستم ولی الان برنامه های زیادی نوشتم.
الان به دلایلی می خوام برم سمتSQL
فرم ها رو بااکسس طراحی کنم و دیتابیس SQL باشه
از این موضوع چیزی نمی دونم.خیلی سرچ کردم ولی چیزی متوجه نشدم
سوالام اینکه من قبلا با کدهای زیر توی فرم هام با دیتابیس ارتباط برقرار می کردم.الام اگر بخوان با SQL ارتباط برقرار کنم باید چی کار کنم.(یکی برنامه از اول می خوام بنویس)

Dim db As Database
Dim rst As Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("check")
rst.AddNew
rst.Fields("noehesab") = txt_1.Value
rst.Fields("serial") = txt_2.Value
rst.update
rst.Close

amirzazadeh
شنبه 25 مرداد 1393, 18:07 عصر
سلام
اول رفرنس ado رو در محيط vba اضافه كن در نسخه 2007 اسمش اينه Microsoft ActiveX Data Object 2.8 Library
بعد از اين كدها براي ارتباط با sql استفاده كن:

Dim Cnxn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim strCnxn As String

Set Cnxn = New ADODB.Connection

strCnxn = "Provider='SQLOLEDB';Data Source='.';" & _
"Initial Catalog='نام ديتابيس';User ID='نام كاربري';Password='پسورد';"
Cnxn.Open strCnxn

Set rs = New ADODB.Recordset

rs.CursorLocation = adUseClient
rs.Open "select * from check", Cnxn, adOpenDynamic, adLockOptimistic, 1
rs.AddNew
بقيه كدها هم عين كد خودته.
موفق باشيد

mhamedm2008
شنبه 25 مرداد 1393, 20:27 عصر
خیلی ممنون
حالا می خواستم ببینم که چه جوری می تونم فایل و یا عکسی را در دیتا بیس SQL از طریق اکسس قرار بدهم.
با تشکر

amirzazadeh
یک شنبه 26 مرداد 1393, 18:03 عصر
خیلی ممنون
حالا می خواستم ببینم که چه جوری می تونم فایل و یا عکسی را در دیتا بیس SQL از طریق اکسس قرار بدهم.
با تشکر
سلام
از اين لينك كمك بگيريد.كدها كاملا گويا هستند.

http://www.freevbcode.com/ShowCode.asp?ID=1802

mhamedm2008
یک شنبه 26 مرداد 1393, 19:57 عصر
با سلام
اینو دیده بودم ولی نتونستم چه باتون و فیلد هایی تعریف کنم.
اگر نمونه بزاری یه عمر مدیون میشم
خیلی خیلی ممنون

amirzazadeh
سه شنبه 28 مرداد 1393, 09:18 صبح
با سلام
اینو دیده بودم ولی نتونستم چه باتون و فیلد هایی تعریف کنم.
اگر نمونه بزاری یه عمر مدیون میشم
خیلی خیلی ممنون
سلام
براي استفاده از اين نمونه ديتابيس pubs بايد روي سرور sql اتچ شده باشه(كه معمولا همزمان با نصب sql به طور اتوماتيك با برنامه نصب ميشه).همينطور اگر ديتابيس شما پسورد داره بايد در كدهاي ارائه شده پسورد خودتون رو جايگزين كنيد:


Private Sub Command5_Click()
Set Cn = New ADODB.Connection
Cn.Open "Provider=SQLOLEDB;data Source=.;" & _
"Initial Catalog=pubs;User Id=sa;Password=yourpass"
Set rs = New ADODB.Recordset
rs.Open "Select * from pub_info", Cn, adOpenKeyset, adLockOptimistic
Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.Write rs.Fields("logo").Value
mstream.SaveToFile "c:\temp.png", adSaveCreateOverWrite
MsgBox "ÊÕæíÑ ÈÇѐÐÇÑí ÔÏ."
rs.Close
Cn.Close
Image1.Picture = "C:\temp.png"
End Sub



Private Sub Command6_Click()
Set Cn = New ADODB.Connection
Cn.Open "Provider=SQLOLEDB;data Source=.;" & _
"Initial Catalog=pubs;User Id=sa;Password=yourpass"
Set rs = New ADODB.Recordset
rs.Open "Select * from pub_info", Cn, adOpenKeyset, adLockOptimistic
Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
With dlgDialog
.DialogTitle = "Open Image File...."
.Filter = "Image Files (*.gif ; *.png ;*.bmp)| *.gif;*.png;*.bmp"


On Error Resume Next
.ShowOpen
If Err.Number = cdlCancel Then
' The user canceled.
Exit Sub
ElseIf Err.Number <> 0 Then
' Unknown error.
MsgBox "Error " & Format$(Err.Number) & _
" selecting file." & vbCrLf & _
Err.Description
Exit Sub
End If
On Error GoTo 0

mstream.LoadFromFile dlgDialog.FileName
rs.Fields("logo").Value = mstream.Read
rs.Update
rs.Close
Cn.Close
MsgBox "ÊÕæíÑ ÐÎíÑå ÑÏíÏ"

End With

End Sub

mhamedm2008
چهارشنبه 29 مرداد 1393, 15:26 عصر
با سلامو تکشر صمیمانه به خاطر پاسخگویی
این فایلی که پیوست کردید توی ورژن 2013 که اجرای نمیشه.توی ورژن 2007 هم اررو داره توی ریفرنس داره.چی کار باید کرد؟؟؟

http://upload7.ir/imgs/2014-08/09298002312007816399.jpg

http://upload7.ir/imgs/2014-08/39831416361736262742.jpg

mhamedm2008
چهارشنبه 29 مرداد 1393, 17:16 عصر
از بعضی از پارامتر ها ایراد میگیره. اونایی که می دونستم رو تعریف کردم ولی بعضی ها مثل cdlCancel و Format$ رو نمی دونم باید چی تعریف کنم.
کلا به همه خطوط ارور می گیره.
مثلا به .DialogTitle = "Open Image File...."
.Filter = "Image Files (*.gif ; *.png ;*.bmp)| *.gif;*.png;*.bmp"


باید چی کار کنم؟؟؟(البته مشکل پست قبل رو با نصب ocx مروبطه حل کردم)

amirzazadeh
چهارشنبه 29 مرداد 1393, 18:34 عصر
سلام
دوست من من اين كدها با 2013 اجرانكردم ولي با 2007 مشكلي نداره.رفرنس common dialog control ظاهرا در سيستم شما add نشده كه با افزودن اون مشكل حل ميشه در مورد خطاي دوم هم ميتونيد اون قسمت از كدها حذف كنيد يعني اين تكه كد(مشكل خاصي پيش نمياد)

If Err.Number = cdlCancel Then ' The user canceled.
Exit Sub
ElseIf Err.Number <> 0 Then
' Unknown error.
MsgBox "Error " & Format$(Err.Number) & _
" selecting file." & vbCrLf & _
Err.Description
Exit Sub
End If
On Error GoTo 0

mhamedm2008
چهارشنبه 29 مرداد 1393, 18:58 عصر
دوست عزیز به تصویر زیر نگاه کن
به نظرت مشکل از کجاست؟؟؟
http://upload7.ir/imgs/2014-08/96713738318661919903.jpg (http://upload7.ir/)

amirzazadeh
چهارشنبه 29 مرداد 1393, 19:09 عصر
سلام
نمونه اصلاح شده رو كنترل كنيد:

mhamedm2008
پنج شنبه 30 مرداد 1393, 00:43 صبح
خیلی خیلی ممنون.جواب داد.
نوع فیلد SQL را روی image گذاشتم.شنیدم که این نوع از دیتا می خواد از SQL حذف بشه.آیا راهی داره و یا حالت دیگه که بعد ها به مشکل نخورم.
سوال دوم اینکه چه جوری می تونم محدودیت حجم برای این نوع اعمال کنم.
و سوال سوم اینکه آیا از این طریق فقط میشه عکس رو به SQL منتقل کرد و یا میشه فرمت هایی مثل فایل های ورود و یا pdf را منتقل کرد؟؟؟
با تشکر صمیمانه

mhamedm2008
دوشنبه 03 شهریور 1393, 22:58 عصر
با سلام
سوال قبل و جواب ندادین.
یک سوال دیگه.می خوام کاری کنم تصویر به حای نمایش کادری باز یشه و محل ذخیره عکس را بپرسه.
در ضمن برای قرار دادن محدودیت حجم برای عکس باید چی کار کنم؟
ممنون

mohammadsaleh
سه شنبه 04 شهریور 1393, 20:53 عصر
ببخشيد سئوال در سئوال ميشه ولي فكر كنم دوستان ديگر هم اين سئوال رو داشته باشند.
منهم اخيرا به سمت sql رفتم و بصورت تمريني كار رو شروع كردم. براي اينكار ابتدا ميكروسوفت اس كيو ال سرور 2008 را بر روي يكي از سيستم ها نصب كردم بعد جدولهام رو تبديل به جداول اس كيو ال كردم. جدولها به صورت قبل ديده ميشه ولي در فرم هام كه همگي از دستورات ركوردست استفاده كردم نمي تونم استفاده كنم. آيا هر ركوردستي كه استفاده ميشه بايد با دستور فوق متصل بشه يا تو يه فرم بايد كنكشن ايجاد كرد

amirzazadeh
چهارشنبه 05 شهریور 1393, 09:19 صبح
سلام
شما براي اتصال به سرور sql دو تا كار ميتونيد انجام بديد:
1- ايجاد odbc براي اتصال به سرور و استفاده از كدهاي قبلي كه از تكنولوژي DAO بهره گرفته شده.
2-ايجاد نرم افزار بر پايه اكسس پروجكت كه دراين حالت از تكنولوژي ADO بهره گرفته ميشه و شما بايد كدهاتون رو اصلاح كنيد.
انتخاب با شما !!

mhamedm2008
چهارشنبه 05 شهریور 1393, 14:45 عصر
با سلام
سوال قبل و جواب ندادین.
یک سوال دیگه.می خوام کاری کنم تصویر به حای نمایش کادری باز یشه و محل ذخیره عکس را بپرسه.
در ضمن برای قرار دادن محدودیت حجم برای عکس باید چی کار کنم؟
ممنون

با سلام
جناب amirzazadeh (http://barnamenevis.org/member.php?47888-amirzazadeh) اگر ممکنه جوای این سوال رو بدید
ممنون

amirzazadeh
پنج شنبه 06 شهریور 1393, 08:03 صبح
با سلام
سوال قبل و جواب ندادین.
یک سوال دیگه.می خوام کاری کنم تصویر به حای نمایش کادری باز یشه و محل ذخیره عکس را بپرسه.
در ضمن برای قرار دادن محدودیت حجم برای عکس باید چی کار کنم؟
ممنون

سلام
براي گرفتن سايز فايل از دستور زير استفاده كنيد:

FileLen ( file_path )
در مورد قسمت اول سوالتون بايد بگم كه تصوير شما به صورت باينري درsql ذخيره ميشه بنابراين اگر منظور شما ذخيره تصوير به صورت فايل png يا bmp و... هست ميتونيد از پنجره save as براي اين منظور استفاده كنيد.

mhamedm2008
پنج شنبه 06 شهریور 1393, 21:50 عصر
سوال من هم همینه.چه طور می تونم از دستور save as استفاده کنم.
در نمونه ارسالی به طور پیشفرض در temp ذخیره میشه.چه جوری می تونم کاری کنم تا کادری باز بشه تا کاربر بتونه اونو جای دلخواه ذخیره کنه

mstream.SaveAs "c:\temp.jpeg", adSaveCreateOverWrite

amirzazadeh
شنبه 08 شهریور 1393, 10:38 صبح
سلام
كدها رو به اين شكل اصلاح كنيد:

Private Sub Command5_Click()
Dim fDialog As Object
Set fDialog = Application.FileDialog(msoFileDialogSaveAs)
Dim varFile As Variant
Set Cn = New ADODB.Connection
Cn.Open "Provider=SQLOLEDB;data Source=.;" & _
"Initial Catalog=pubs;User Id=sa;Password=singlehand"
Set rs = New ADODB.Recordset
rs.Open "Select * from pub_info", Cn, adOpenKeyset, adLockOptimistic
Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.Write rs.Fields("logo").Value
With fDialog
.AllowMultiSelect = False
.Title = "áØÝÇ ãÓíÑ ÐÎíÑå ÑÇ ãÔÎÕ äãÇííÏ :"

.InitialFileName = "C:\TEMP.PNG"

If .Show = True Then
For Each varFile In .SelectedItems
GetFileName = varFile
Next
End If
End With
mstream.SaveToFile GetFileName, adSaveCreateOverWrite
MsgBox "ÊÕæíÑ ÈÇѐÐÇÑí ÔÏ."
rs.Close
Cn.Close
Image1.Picture = GetFileName
End Sub

mhamedm2008
پنج شنبه 10 مهر 1393, 23:11 عصر
سلام جناب amirzazadeh (http://barnamenevis.org/member.php?47888-amirzazadeh)

یه سوال دیگه.من یه پوشه توی درایو f با نام hamed دارم که توی اون بر فرض 2000 تا عکس هست.مثلا به عنوان 7856.jpg
حالا می خوام این ها رو وارد دیتابیس SQL کنم. که نام عکس توی فیلد shomaresabt و خود عکس توی فیلد image ذخیره بشه
اگر می خوام دستی این کار رو کنم خیلی خیلی طول میکشه.
با حلقه تکرار چه جوری باید اینکار و کنم که نام عکس رو هم تشخیص بده و توی فیلد خودش بزاره
البته اینو بگم حجم عکس ها کمه و درحد 100 کیلوبایت هست
مثل همیشه خیلی خیلی ممنون

mhamedm2008
جمعه 11 مهر 1393, 10:57 صبح
با هزار ترفند تونستم این کار و انجام بدم.ممنون حل شد

mhamedm2008
شنبه 12 مهر 1393, 13:17 عصر
سلام
كدها رو به اين شكل اصلاح كنيد:

Private Sub Command5_Click()
Dim fDialog As Object
Set fDialog = Application.FileDialog(msoFileDialogSaveAs)
Dim varFile As Variant
Set Cn = New ADODB.Connection
Cn.Open "Provider=SQLOLEDB;data Source=.;" & _
"Initial Catalog=pubs;User Id=sa;Password=singlehand"
Set rs = New ADODB.Recordset
rs.Open "Select * from pub_info", Cn, adOpenKeyset, adLockOptimistic
Set mstream = New ADODB.Stream
mstream.Type = adTypeBinary
mstream.Open
mstream.Write rs.Fields("logo").Value
With fDialog
.AllowMultiSelect = False
.Title = "áØÝÇ ãÓíÑ ÐÎíÑå ÑÇ ãÔÎÕ äãÇííÏ :"

.InitialFileName = "C:\TEMP.PNG"

If .Show = True Then
For Each varFile In .SelectedItems
GetFileName = varFile
Next
End If
End With
mstream.SaveToFile GetFileName, adSaveCreateOverWrite
MsgBox "ÊÕæíÑ ÈÇѐÐÇÑí ÔÏ."
rs.Close
Cn.Close
Image1.Picture = GetFileName
End Sub


با سلام
به یک مشکلی برخوردم.
من با استفاده از این کد تونستم که تصویر رو توی دیتابیس ذخیره کنم.
حالا یک مشکل دارم و آن هم اینکه با بالا رفتن تعداد رکوردها سرعت ذخیره عکس به شدت بالا می ره. البته خیلی هم بالا نیست.
و از اونجایی که من فهمیدم مشکل از دستور زیر می باشد.
rs.Open "Select * from pub_info", Cn, adOpenKeyset, adLockOptimistic
دستور رو به صورت زیر هم تغییر دادم ولی با مشکل نداره.ظاهرا کلا رکورد ها رو فراخوانی می کنه
rs.Open "pub_info", Cn, adOpenKeyset, adLockOptimistic
حالا اومدن با اسفاده از دستور insert into رکوردها رو اضافه کردم که در این صورت سرعتش بسیار بالاست.
فقط یک مشکلی دارم و اونم اینه که با دستور mstream.read مشکل داره
باید کد را چه جوری اصلاح کنم که اررور نگیره
ممنون
strSQL = "INSERT INTO peyvast_v(image_v,sabt,filetype_v,imageid) Values ("mstream.Read",'" & [kodimage] & "','" & [file_type] & "','" & Me.Text8 & "');"
Cnxn.Execute strSQL

توی هر چیزی از جمله "" و یا ' ' گذاشتم ولی باز هم اررور می گیره یا عکس رو ذخیره نمی کنه و موقع فراخوانی با یک فایل خراب مواجه می شیم
با تشکر

mhamedm2008
دوشنبه 18 اسفند 1393, 21:18 عصر
با سلام
با کمک شما دوستان بخصوص جناب amirzazadeh (http://barnamenevis.org/member.php?47888-amirzazadeh) توانستم کل برنامه خود را از طریق کد نویسی (تیبل ها لینک نشده است) از دیتابیس اکسس به SQL تبدیل کنم.اعم از آپدیت،dmax ، Dlookup ، کوئری ها و ...
حالا رسیدم به ریپورت.سوالم اینه که باید برای ریپورت چه کاری انجام بدم. یعنی توی چه رویدادی از ریپورت باید کانکشن ها و select ها رو قرار بدم؟؟؟
خیلی خیلی ممنون

amirzazadeh
سه شنبه 19 اسفند 1393, 19:40 عصر
با سلام
با کمک شما دوستان بخصوص جناب amirzazadeh (http://barnamenevis.org/member.php?47888-amirzazadeh) توانستم کل برنامه خود را از طریق کد نویسی (تیبل ها لینک نشده است) از دیتابیس اکسس به SQL تبدیل کنم.اعم از آپدیت،dmax ، Dlookup ، کوئری ها و ...
حالا رسیدم به ریپورت.سوالم اینه که باید برای ریپورت چه کاری انجام بدم. یعنی توی چه رویدادی از ریپورت باید کانکشن ها و select ها رو قرار بدم؟؟؟
خیلی خیلی ممنون
سلام
خوب قاعدتا تو رويداد Open گزارش ميتونيد اين كارو انجام بديد
................
موفق باشيد

mhamedm2008
چهارشنبه 30 اردیبهشت 1394, 20:18 عصر
سلام
من با یا access تونستم stored procedure رو در ریپورت اکسس فراخوانی کنم.
ولی مشکلم اینه که فقط یه ردیف از تیبل را در ریپورت ذخیره می کنم.
یه سرچ هم توی سایت های انگلیسی کردم ولی چیزی متوجه نشدم.ولی به این رسیدم ولی نمی دونم چه جوری باید استفاده کنم


Dim cdb As DAO.Database, qdf As DAO.QueryDef
Set cdb = CurrentDb
Set qdf = cdb.QueryDefs("myPassThroughQuery")
qdf.SQL = "EXEC spMyProc @ID = " & "1"
Set qdf = Nothing
Set cdb = Nothing
DoCmd.OpenReport "mySpReport", acViewPreview

چی کار کنم؟؟