संक्षेप में: मैं अपने क्लाइंट के लिए शेड्यूलर बना रहा हूं और बाधाओं के कारण, इसे एक एक्सेल फ़ाइल में होना चाहिए (जितना छोटा मुमकिन)। तो एक वर्कशीट यूआई के रूप में काम करता है और कोई अन्य टेबल या सेटिंग्स होगा।वीबीए-एसक्यूएल अद्यतन/INSERT/एक्सेल वर्कशीट से चुनें/
मैं एक वर्कशीट (जिसे "TblEmpDays" नाम दिया गया है) पर शेड्यूल डेटा के साथ काम करने के लिए SQL (जिसे मैं नया हूं) का उपयोग करने की कोशिश कर रहा हूं। तो मुझे इस वर्कशीट में/से रिकॉर्ड जोड़ने/अपडेट करने और पुनर्प्राप्त करने की आवश्यकता है। मैं कुछ मनमानी डेटा (और एक रेंज में पेस्ट) के साथ काम करने के लिए SELECT
क्वेरी प्राप्त करने में सक्षम था। हालांकि, मैं काम करने के लिए INSERT
या UPDATE
प्राप्त करने में सक्षम नहीं हूं। मैंने इसे INSERT INTO [<table name>$] (<field names>) VALUES (<data>);
के रूप में संरचित देखा है। हालांकि यह मेरे लिए एक रन-टाइम त्रुटि देता है "'-2147217900 (80040e14)' सिंटेक्स सम्मिलित में त्रुटि बयान में।"
मैं VBA का उपयोग कर रहा यह सब लिखने के लिए और मैं बनाने के लिए एक एसक्यूएल सहायक वर्ग बनाया क्वेरी निष्पादन आसान है।
स्पष्टीकरण के लिए, मेरा प्रश्न है: मुझे INSERT
और UPDATE
प्रश्नों को बनाने की आवश्यकता कैसे है? मैं क्या खो रहा हूँ? मैं जितना संभव हो उतना संबंधित जानकारी पोस्ट करने की कोशिश कर रहा हूं, इसलिए अगर मुझे कुछ याद आया तो मुझे बताएं।
कक्षा एसक्यूएल:
Private pCn ' As Database
Private pResult 'As Recordset
Private pSqlStr As String
Public Property Get Result()
Result = pResult
End Property
Public Function Init()
Set pCn = CreateObject("ADODB.Connection")
With pCn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=""Excel 12.0 Macro;HDR=YES;ReadOnly=False"";"
.Open
End With
End Function
Public Function Cleanup()
If Not (pCn Is Nothing) Then
pCn.Close
Set pCn = Nothing
End If
If Not pResult Is Nothing Then
Set pResult = Nothing
End If
End Function
Public Function CopyResultToRange(rg As Range)
If Not rg Is Nothing And Not pResult Is Nothing Then
rg.CopyFromRecordset pResult
End If
End Function
Public Property Get query() As String
query = pSqlStr
End Property
Public Property Let query(value As String)
pSqlStr = value
End Property
Public Function Execute(Optional sqlQuery As String)
If sqlQuery = "" Then
sqlQuery = query
End If
If Not pCn Is Nothing Then
Set pResult = pCn.Execute(sqlQuery, , CommandTypeEnum.adCmdText Or ExecuteOptionEnum.adExecuteNoRecords)
Else
MsgBox "SQL connection not established"
End If
End Function
निष्पादित समारोह:
Dim s As SQL ' this is the SQL class '
Dim tbl As String
' rcDay=date string, rcIn & rcOut = time strings, rcVac=boolean string, rcSls=number string'
Dim rcName As String, rcDay As String, rcIn As String, rcOut As String, rcVac As String, rcSls As String
Dim qry As String
tbl = "[TblEmpDays$]"
qry = "INSERT INTO <tbl> (name, date, in, out, vac, sales)" & vbNewLine & _
"VALUES ('<name>', '<date>', '<in>', '<out>', '<vac>', <sales>);"
' Set rc* vars '
s.Init
s.query = Replace(Replace(Replace(Replace(Replace(Replace(Replace(qry, _
"<tbl>", tbl), _
"<sales>", rcSls), _
"<vac>", rcVac), _
"<out>", rcOut), _
"<in>", rcIn), _
"<date>", rcDay), _
"<name>", rcName)
MsgBox s.query
s.Execute
s.Cleanup
मैं एक भर में देखा है एक समाधान नहीं मिल रहा। मुझे यकीन है कि मैंने अभी सही वाक्यांश या कुछ सरल खोज नहीं किया है।
एक्सेल में डेटाबेस को फिर से बनाने के लिए एक कठिन प्रयास है। क्या आपके पास जेट/एसीई डेटाबेस बनाने के लिए एमएस एक्सेस है? ध्यान दें: आपके उपयोगकर्ताओं को कभी भी एक्सेस का उपयोग करने की आवश्यकता नहीं है लेकिन आप अभी भी अपने यूआई कार्यपुस्तिका को अपने डेटा को रखने के लिए .accdb/.mdb फ़ाइल से कनेक्ट कर सकते हैं, फिर किसी भी/सभी SQL उपलब्ध का उपयोग कर सकते हैं। जेट/एसीई एसक्यूएल इंजन एक .dll फ़ाइल है जो विंडो उपयोगकर्ताओं के लिए उपलब्ध है (और केवल एक्सेस तक ही सीमित नहीं है)। – Parfait
@ पैराफैट मुझे उसमें खोदना होगा (विवादित उत्तरों प्राप्त करना) ... क्या है। डीएल यह है और यह कहां स्थित है? शायद मैं पा सकता हूं कि अगर उनके पास पहुंच नहीं है। (मैं इस पूरे प्रोजेक्ट को सोच रहा हूं कि अगर मैं एक्सेस का उपयोग कर सकता हूं तो यह कितना आसान होगा) – CheeseMo
उपयोगकर्ताओं को आमतौर पर विंडोज़/एसीई इंजन का उपयोग करने के लिए एमएस एक्सेस की आवश्यकता नहीं है जो आमतौर पर विंडोज़ के साथ स्थापित होता है। यह Notepad.exe की तरह है। रजिस्ट्री के तहत देखें, HKEY क्लास रूट: 'माइक्रोसॉफ्ट.एसीई.ओएलडीबी.12.0' और 'माइक्रोसॉफ्ट.जेईटी.ओएलडीबी 4.0'। इसके अलावा, उपयोगकर्ता .accdb फ़ाइलों का उपयोग करने के लिए ** मुफ्त ** [एक्सेस रनटाइम] (https://www.microsoft.com/en-US/download/details.aspx?id=39358) डाउनलोड कर सकते हैं (लेकिन डेवलपर के पास होना चाहिए पूरा कार्यक्रम)। – Parfait