:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

สอบถามเรื่องการ connect sql ด้วย vba ครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
boongum
Member
Member
Posts: 8
Joined: Thu Dec 19, 2013 8:25 am

สอบถามเรื่องการ connect sql ด้วย vba ครับ

#1

Post by boongum »

ผมเขียน vba connect กับ sql ครับ ซึ่งทำได้แล้ว แต่ติดปัญหาคือ
Column ที่จะให้โชว์ข้อมูลไม่ได้อยู่ติดกันทั้งหมดครับ ตอนนี้ผมใช้วิธี เขียนดึงข้อมูลตามจำนวนช่อง เช่น อันแรกช่อง A - E อันกที่ 2 E -G แบบนี้ก็ทำการดึง 2 รอบครับ
ถ้ามีข้อมูลเยอะๆ ทำให้ดึงข้อมูลช้ามากๆ ไม่ทราบว่าพอจะมีวิธีที่ดึงข้อมูลคั้งเดียว แล้วให้ไปออกตามช่องที่ต้องการไหมครับ

Code: Select all

Function DataIB()
Dim rs  As ADODB.Recordset
Dim Connected As Boolean
Dim sql As String
Dim tName As String

Connected = ConnectToDB("10.10.0.0", "Data", "user", "")
tName = "Data"

If Connected Then

    sql = "SELECT  WR_CarID,WR_ID,WR_Date "
    sql = sql & "FROM V_PlanSVOut "
    'sql = sql & "Order By  WR_ID ASC"

    Set rs = New ADODB.Recordset

    rs.Open sql, Conn
    Sheets(tName).Cells(5, 1).CopyFromRecordset rs
    rs.Close
    
    '´Ö§ª×èͺÃÔÉÑ· 䫵ì§Ò¹
    sql = "SELECT CustomerName,SiteName "
    sql = sql & "FROM V_PlanSVOut "
    'sql = sql & "Order By  WR_ID ASC"

    Set rs = New ADODB.Recordset

    rs.Open sql, Conn
    Sheets(tName).Cells(5, 5).CopyFromRecordset rs
    rs.Close
                    
    Conn.Close
    Set Conn = Nothing
    Set rs = Nothing
    
    DataIB = True
Else
     DataIB = False
End If

End Function
  
ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สอบถามเรื่องการ connect sql ด้วย vba ครับ

#2

Post by snasui »

:D เราสามารถเขียน Statement ของ SQL เป็น SELECT WR_CarID,WR_ID,WR_Date,CustomerName,SiteName

เพื่อให้ดึงมาทีเดียว กรณีต้องการวางคอลัมน์ไม่ติดกันสามารถใช้การ Loop เข้ามาช่วยครับ

ตัวอย่างเช่นการ Loop ด้านล่าง สามารถประยุกต์ให้วางตรงไหน อย่างไรก็ได้ครับ

Code: Select all

rs.MoveFirst
iCount = 1: rws = 2: col = 0
Do While rs.EOF = False
    With wb.Sheets(1)
        For Each fld In rs.Fields(iCount)
            .Range("a" & rws).Offset(0, col).Value = fld
            col = col + 1
        Next fld
        iCount = iCount + 1
        rs.MoveNext
    End With
Loop
rs.Close
boongum
Member
Member
Posts: 8
Joined: Thu Dec 19, 2013 8:25 am

Re: สอบถามเรื่องการ connect sql ด้วย vba ครับ

#3

Post by boongum »

ผมลองทำแล้ว แต่ยังไม่เข้าใจ พอรันแล้ว ขึ้น error รูปครับ error ตรง

Code: Select all

For Each fld In rs.Fields(iCount)
ครับ
ขอบคุณครับ
Image 1.jpg

Code: Select all

Function DataIB()
Dim rs  As ADODB.Recordset
Dim Connected As Boolean
Dim sql As String
Dim tName As String
Dim iCount, Rws, Col As Integer
Dim fld As Range

Connected = ConnectToDB("Server", "Data", "user", "")
tName = "Data"

If Connected Then
    sql = "SELECT  top 10 * "
    sql = sql & "FROM V_PlanSVOut "

    Set rs = New ADODB.Recordset

    rs.Open sql, Conn
    rs.MoveFirst
    iCount = 1:  Rws = 5:    Col = 0
    Do While rs.EOF = False
        With Sheets(tName)
            [b]For Each fld In rs.Fields(iCount)[/b]
                .Range("a" & Rws).Offset(0, Col).Value = fld
                Col = Col + 1
            Next fld
            iCount = iCount + 1
            rs.MoveNext
        End With
    Loop
    rs.Close
                
    Conn.Close
    Set Conn = Nothing
    Set rs = Nothing
    
    DataIB = True
Else
     DataIB = False
End If

End Function
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สอบถามเรื่องการ connect sql ด้วย vba ครับ

#4

Post by snasui »

:D Code นั้นคือตัวอย่างเท่านั้น กรณีประกาศเป็น Option Explicit จะต้องประกาศตัวแปรทุกตัว นอกจากนั้นจะต้องประกาศตัวแปร Field เพิ่มด้วย ฯลฯ

ควรแนบไฟล์ประกอบคำถามจะได้สะดวกกับการตอบของเพื่อนสมาชิกครับ
boongum
Member
Member
Posts: 8
Joined: Thu Dec 19, 2013 8:25 am

Re: สอบถามเรื่องการ connect sql ด้วย vba ครับ

#5

Post by boongum »

ตอนนี้ผมดึงข้อมูลได้แล้วครับ แต่ติดปัญหาการดึงข้อมูลยังช้าอยู่ครับ
ไม่ทราบว่ามันสามารถทำให้เร็วกว่านี้ได้ไหมครับ
อันเป็นโค้ดที่ผมใช้ครับ

Code: Select all

Do While rs.EOF = False
	Sheets(tName).Cells(i + 5, 1).Value = rs.Fields("CarID")
	Sheets(tName).Cells(i + 5, 2).Value = rs.Fields("ID")
	rs.MoveNext
	i = i + 1
Loop
Book12.xlsm
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 30917
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 365
Contact:

Re: สอบถามเรื่องการ connect sql ด้วย vba ครับ

#6

Post by snasui »

:D ลองวางที่ชีตใด ๆ ดูก่อนว่าเร็วขึ้นหรือไม่ครับ

ตัวอย่าง Code การวางทั้ง Recordset ลงในเซลล์

Code: Select all

'Other code
Set rs = New ADODB.Recordset
rs.Open sql, Conn

Sheets("x").Range("a2").CopyFromRecordset rs
'Other code
Sheets("x") คือชีตใด ๆ ให้เปลี่ยนเป็นชีตที่ใช้จริงครับ
boongum
Member
Member
Posts: 8
Joined: Thu Dec 19, 2013 8:25 am

Re: สอบถามเรื่องการ connect sql ด้วย vba ครับ

#7

Post by boongum »

ถ้าใช้อันนี้เร็วครับ ตอนแรกผมก็ใช้โค้ดนี้ครับ แต่ติดตรงที่ว่า ข้อมูลที่วางลงในเซลล์ มันอยู่ไม่ต่อเนื่องกันครับ มีเว้น A1:E1 แล้วข้ามไป G1:F1 ประมาณนี้ครับ และข้อมูลมีหมื่น ถึง สีหมื่น แถว เลยต้องหาโค้ดใหม่ เพื่อมาช่วยให้เร็วขึ้นครับ
ขอบคุณครับ
snasui wrote: Tue Nov 27, 2018 10:43 pm :D ลองวางที่ชีตใด ๆ ดูก่อนว่าเร็วขึ้นหรือไม่ครับ

ตัวอย่าง Code การวางทั้ง Recordset ลงในเซลล์

Code: Select all

'Other code
Set rs = New ADODB.Recordset
rs.Open sql, Conn

Sheets("x").Range("a2").CopyFromRecordset rs
'Other code
Sheets("x") คือชีตใด ๆ ให้เปลี่ยนเป็นชีตที่ใช้จริงครับ
astalavista
Member
Member
Posts: 48
Joined: Tue Oct 03, 2017 11:05 am

Re: สอบถามเรื่องการ connect sql ด้วย vba ครับ

#8

Post by astalavista »

ลองเพิ่ม

Code: Select all

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
ไว้ส่วนบนของ function
และ

Code: Select all

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
ไว้ตอนก่อนออกจาก function ดูครับ
boongum
Member
Member
Posts: 8
Joined: Thu Dec 19, 2013 8:25 am

Re: สอบถามเรื่องการ connect sql ด้วย vba ครับ

#9

Post by boongum »

ได้แล้วครับ ขอบคุณมากๆๆ ครับ
astalavista wrote: Wed Nov 28, 2018 10:50 am ลองเพิ่ม

Code: Select all

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
ไว้ส่วนบนของ function
และ

Code: Select all

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
ไว้ตอนก่อนออกจาก function ดูครับ
Post Reply