PDA

View Full Version : مبتدی: تبدیل کد اکسس به اس کیو ال



milad.biroonvand
دوشنبه 11 آبان 1388, 15:43 عصر
اگر بخواهیم این کد را در اس کیو ال بنویسیم به چه صورت است ؟؟



Dim db As New ADODB.Connection
Dim rs As New ADODB.Recordset
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
db.Provider = "Microsoft.Jet.OLEDB.4.0"
db.Open("db.mdb")
LoadTV()
End Sub
Private Sub LoadTV()
'On Error Resume Next
rs.Open("[Folder]", db, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockOptimistic)
Dim K, I, J, L As Integer
Dim T, R, Pr As String
rs.MoveFirst()
For I = 1 To rs.RecordCount
K = rs.Fields("Level").Value
If J < K Then J = K
If Not rs.EOF Then rs.MoveNext()
Next
rs.MoveFirst()
For I = 0 To J
rs.MoveFirst()
For L = 1 To rs.RecordCount
K = rs.Fields("Level").Value
T = rs.Fields("head").Value '*** TEXT
R = rs.Fields("ID").Value '*** key = F+id
Pr = rs.Fields("Parent").Value

If I = 0 And K = 0 Then
' TV.Nodes.Add("F" & R, T, "bc", "bo")
TV.Nodes.Add(R, T, "bc", "bo")
Else
If K = I Then
' TV.Nodes.Find("F" & Pr, True)(0).Nodes.Add("F" & R, T, "gc", "go")
TV.Nodes.Find(Pr, True)(0).Nodes.Add(R, T, "gc", "go")
End If
End If
My.Application.DoEvents()
If Not rs.EOF Then rs.MoveNext()
Next
' If Not rs.EOF Then rs.MoveNext()
Next
rs.Close()
'rs.Open("Matn", db)
'rs.MoveFirst()
'For I = 1 To rs.RecordCount
' K = rs.Fields("Folder").Value
' R = rs.Fields("ID").Value
' T = rs.Fields("Head").Value
' TV.Nodes.Find("F" & K, True)(0).Nodes.Add("M" & R, T, "mc", "mo")
' If Not rs.EOF Then rs.MoveNext()
'Next
'rs.Close()

End Sub
Sub CloseDB()
rs.Close()
db.Close()
End Sub

Private Sub TV_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles TV.ItemDrag
DoDragDrop(e.Item, DragDropEffects.Move)
End Sub


Private Sub CreateRoot(ByVal Parrent As Integer, ByVal Level As Integer, ByVal PText As String)
Dim strsql As String
Dim cmd As New OleDbCommand
Level += 1
If Con.State = ConnectionState.Closed Then
Con.Open()
End If
strsql = "insert into [Folder] ([Level],Head,Parent) values (" & Level & ",'" & PText & "', " & Parrent & ")"
cmd.Connection = Con
cmd.CommandText = strsql
cmd.ExecuteNonQuery()
Con.Close()

End Sub

milad.biroonvand
دوشنبه 11 آبان 1388, 15:44 عصر
هدف اصلی همینه


Dim db AsNew ADODB.Connection
Dim rs AsNew ADODB.Recordset
PrivateSub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Loaddb.Provider = "Microsoft.Jet.OLEDB.4.0"
db.Open("db.mdb")

Mani_rf
سه شنبه 12 آبان 1388, 18:10 عصر
برای بدست آوردن کد اتصال (Connection String) هر دیتابیس شما می توانید دیتابیس خود را به قسمت Server Explorer اضافه نمایید (برای باز کردن Server Explorer از منوی View گزینه Server Explorer را انتخاب کنید.)، بر روی دیتا بیس اضافه شده کلیک کنید و در قسمت Properties و Connection String رشته مورد نظر را به دست آورید. مزیت این قسمت در این جاست که به نسبت نوع دیتابیس اضافه شده رشته مناسب را برای شما ایجاد می کند.


http://barnamenevis.org/forum/attachment.php?attachmentid=39262&stc=1&d=1257261019

Hossis
سه شنبه 12 آبان 1388, 21:03 عصر
آقای مدیر ، جوابتون ربطی به سؤال نداشت
سؤال از تبدیل کد اکسس به اسکیوال است نه کانکشن اکسس، جرا که جواب شما توی سؤال هست
در ضمن دیتابیس آقای بیرونوند مربوط به اکسس 2003 هست و کد شما مربوط به اکسس 2007 و فرق اونا در این قسمت ظاهر میشه
به عبارتی با کانکشن استرینگ و مثالی که ایشان زدند،‌دیگر لازم نیست که فایل اکسس رو در پروژه لود کنیم و در پنجره فوق نمایش دهیم

milad.biroonvand
چهارشنبه 13 آبان 1388, 00:28 صبح
سلام دوستان عزيز ، ماني (بودا) و hossis حالا به نظر شما چه راه حلي وجود داره براي اينكار ، اين كد رو كه من از خود آقاي hossis گرفته بودم و از ماني هم تقاضاي كمك كردم . پيشاپيش از همگي مچكرم .

milad.biroonvand
چهارشنبه 13 آبان 1388, 00:30 صبح
من اين راه حل و رو بلدم فقط مي خوام ، بدونم اگه من جداولم در اس كيو ال باشه به چه صورت اين كد بايد تبديل بشه .



برای بدست آوردن کد اتصال (Connection String) هر دیتابیس شما می توانید دیتابیس خود را به قسمت Server Explorer اضافه نمایید (برای باز کردن Server Explorer از منوی View گزینه Server Explorer را انتخاب کنید.)، بر روی دیتا بیس اضافه شده کلیک کنید و در قسمت Properties و Connection String رشته مورد نظر را به دست آورید. مزیت این قسمت در این جاست که به نسبت نوع دیتابیس اضافه شده رشته مناسب را برای شما ایجاد می کند.



http://barnamenevis.org/forum/attachment.php?attachmentid=39262&stc=1&d=1257261019

milad.biroonvand
چهارشنبه 13 آبان 1388, 00:33 صبح
آقای مدیر ، جوابتون ربطی به سؤال نداشت
سؤال از تبدیل کد اکسس به اسکیوال است نه کانکشن اکسس، جرا که جواب شما توی سؤال هست
در ضمن دیتابیس آقای بیرونوند مربوط به اکسس 2003 هست و کد شما مربوط به اکسس 2007 و فرق اونا در این قسمت ظاهر میشه
به عبارتی با کانکشن استرینگ و مثالی که ایشان زدند،‌دیگر لازم نیست که فایل اکسس رو در پروژه لود کنیم و در پنجره فوق نمایش دهیم


Hossis جان من از كدي كه خودت بهم دادي استفاده كردم ، حالا اگه جداول تو اسكيو ال باشن بايد به چه شكلي باشد .

با تشكر

Hossis
چهارشنبه 13 آبان 1388, 22:18 عصر
Hossis جان من از كدي كه خودت بهم دادي استفاده كردم ، حالا اگه جداول تو اسكيو ال باشن بايد به چه شكلي باشد .

با تشكر
من این اتصال Adodb رو مثل کف دست بلدم ولی در مورد سکیوال یک خط هم نمی تونم بنویسیم چه برسد به یک کد!!
از دوستان دیگر تقاضای همکاری دارم

shahab2025
چهارشنبه 13 آبان 1388, 23:54 عصر
من این اتصال Adodb رو مثل کف دست بلدم ولی در مورد سکیوال یک خط هم نمی تونم بنویسیم چه برسد به یک کد!!
از دوستان دیگر تقاضای همکاری دارم سلام
تا جاییکه من میدونم شما میتونید در سه مرحله این کارو بکنید
1- در ابتدا sqlclient را import کنی
2-کانکشن را تصحیح کنی
3-داخل کد هر جا که oledb داری به sql تغییر بدی

در این صورت برنامه ات تحت دیتابیس جدید کار میکنه . من روی یک پروژه کوچک تست کردم جواب داد

البته اینو هم بگم که باید دیتابیس اکسس را هم در sql ایمپورت کنی

Hossis
پنج شنبه 14 آبان 1388, 23:17 عصر
سلام
تا جاییکه من میدونم شما میتونید در سه مرحله این کارو بکنید
1- در ابتدا sqlclient را import کنی
2-کانکشن را تصحیح کنی
3-داخل کد هر جا که oledb داری به sql تغییر بدی

در این صورت برنامه ات تحت دیتابیس جدید کار میکنه . من روی یک پروژه کوچک تست کردم جواب داد

البته اینو هم بگم که باید دیتابیس اکسس را هم در sql ایمپورت کنی
این ها یک تئوری هست که برای امثال ما که کار نکردیم ، مفهوم ندارد ، اگر ممکن بود یک مثال و یک پروژه کار با سکیوال بذارید یا ترجمه کدهای پست اول رو به سکیوال برگردونید

hadiit
جمعه 15 آبان 1388, 14:08 عصر
imports SYSTEM.data.sqlclint

Dim con As New SqlConnection("Data Source=.;Initial Catalog=database1;Integrated Security=True")

Dim sqlc As SqlCommand
Dim t1 As String
t1 = String.Format("insert into table1 (x1,y1) values('{0}','{1}')", x1, y1)

con.Open()
sqlc = New SqlCommand(t1, con)
sqlc.ExecuteNonQuery()
con.Close()

Hossis
جمعه 15 آبان 1388, 18:50 عصر
با تشکر
دو سوال داشتم :‌
اول : فایل دیتابیس با چه پسوندی و کجا باید قرار بگیرد تا با این دستور فراخوانی شود؟ (منظورم اینه که آدرسش تو کدوم شاخه باید باشه و آیا باید توی پروژه هم بارگذاری بشه یا نه؟9
دوم: این دستور ظاهرا مال نوشتن و ذخیره توی بانک هست، برای دستورات دیگه مثل اضافه، حذف و . .. هم مثال بزنید

با تشکر

shahab2025
جمعه 15 آبان 1388, 23:54 عصر
این ها یک تئوری هست که برای امثال ما که کار نکردیم ، مفهوم ندارد ، اگر ممکن بود یک مثال و یک پروژه کار با سکیوال بذارید یا ترجمه کدهای پست اول رو به سکیوال برگردونید

سلام
اینم یه کار خیلی کوجولو که با بانک pubs تحت sql2000 کار میکنه
فکر نکنم نیاز باشه بانک رو بدم:بامزه:

milad.biroonvand
شنبه 16 آبان 1388, 08:53 صبح
با تشکر از همه ی دوستان ، مرسی از پاسخ هایتان جواب رو پیدا کردم این بود :خودم به این کد تبدیلش کردم ، خود اکسسه اگه کسی خواست به اس کیو ال تبدیلش کنه باید به جای oledb ها sql بزاره .




Public Class Form1
Public DsCenter As New DataSet
Public Count As Integer = 1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
FillDsCenter()
LoadTV()
End Sub
Public Sub FillDsCenter()
Dim StrSql As String
Dim da As New OleDbDataAdapter
If Con.State = ConnectionState.Closed Then
Con.Open()
End If
StrSql = "SELECT * FROM Folder"
da = New OleDbDataAdapter(StrSql, Con)
DsCenter.Clear()
da.Fill(DsCenter, "tbl")
Con.Close()
End Sub

Private Sub LoadTV()
Dim K, I, J, L As Integer '1
Dim T, R, Pr As String '2
Count = 1 '3
For I = 1 To DsCenter.Tables("tbl").Rows.Count '4
K = DsCenter.Tables("tbl").Rows(Count - 1).Item("Level") '5
If J < K Then J = K '6
If Not (Count = DsCenter.Tables("tbl").Rows.Count) Then Count += 1
Next 'ok
Count = 1 'ok
For I = 0 To J 'ok
Count = 1 'ok
For L = 1 To DsCenter.Tables("tbl").Rows.Count 'ok
K = DsCenter.Tables("tbl").Rows(Count - 1).Item("Level") 'ok
T = DsCenter.Tables("tbl").Rows(Count - 1).Item("head") 'ok
R = DsCenter.Tables("tbl").Rows(Count - 1).Item("ID") 'ok
Pr = DsCenter.Tables("tbl").Rows(Count - 1).Item("Parent") 'ok
If I = 0 And K = 0 Then 'ok
TV.Nodes.Add(R, T, "bc", "bo") 'ok
Else 'ok
If K = I Then 'ok
TV.Nodes.Find(Pr, True)(0).Nodes.Add(R, T, "gc", "go") 'ok
End If 'ok
End If 'ok
If Count <> DsCenter.Tables("tbl").Rows.Count Then Count += 1
Next
Next

'*** table matn
'Count = 1
'For I = 1 To DsCenter.Tables("tbl").Rows.Count
' K = DsCenter.Tables("tbl").Rows(Count - 1).Item("Folder")
' R = DsCenter.Tables("tbl").Rows(Count - 1).Item("ID")
' T = DsCenter.Tables("tbl").Rows(Count - 1).Item("Head")
' TV.Nodes.Find("F" & K, True)(0).Nodes.Add("M" & R, T, "mc", "mo")
' If Count <> DsCenter.Tables("tbl").Rows.Count Then Count += 1
'Next
End Sub

hadiit
شنبه 16 آبان 1388, 09:31 صبح
با تشکر
دو سوال داشتم :‌
اول : فایل دیتابیس با چه پسوندی و کجا باید قرار بگیرد تا با این دستور فراخوانی شود؟ (منظورم اینه که آدرسش تو کدوم شاخه باید باشه و آیا باید توی پروژه هم بارگذاری بشه یا نه؟9
دوم: این دستور ظاهرا مال نوشتن و ذخیره توی بانک هست، برای دستورات دیگه مثل اضافه، حذف و . .. هم مثال بزنید

با تشکر

Hossis جان فایل دیتابیس رو باید تو import sql server کنی و نیازی به آدرس فیزیکی مثل اکسس نیست
برای دومی هم شکل کلی کانکشن فرقی نمیکنه فقط باید دستور insert رو به دستور دلخواه عوض کنی و گزینه sqlc.ExecuteNonQuery رو به گزینه مناسب تغییر بدی.