2016-10-14 2 views
0

Ich schreibe ein VBS-Programm, das mit einer SQLite-Datenbank interagiert, aber ich habe ein Problem, wenn ich wissen will, ob ein Datensatz existiert.Wissen, ob ein Datensatz existiert

Hier mein Code:

Dim objConn, objRecordSet, following, today, found, search_value, rst 

Const adOpenStatic = 3 
Const adLockOptimistic = 3 

Set objConn = CreateObject("ADODB.Connection") 
Set objRecordSet = CreateObject("ADODB.Recordset") 

'Database connection  
objConn.Open("DRIVER=SQLite3 ODBC Driver;Database=C:\Users\Quentin\Downloads\Quentin-Classementhashtags.db") 

following = "youyou" 
today = "CURRENT_DATE" 

'Search if a record exists 
Set rst = objRecordSet.Open "SELECT Name FROM Test WHERE Name = " & "'" & _ 
      following & "'" & ";", objConn, adOpenStatic, adLockOptimistic 

If (rst.EOF) Then 
    search_value = 0 
Else 
    search_value = 1 
End If 

objRecordSet.Close 

'If the record doesn't exist, insert the value of the variable "following" 
If search_value = 0 Then 
    objRecordSet.Open "INSERT INTO Test (Name, Joined) VALUES " & "('" & _ 
     following & "', " & today & ");", objConn, adOpenStatic, adLockOptimistic 
End If 

objConn.Close 

Meine INSERT-Abfrage funktioniert, wenn ich es ohne Bedingung testen.

aber ich habe ein Problem Linie:

Set rst = objRecordSet.Open "SELECT Name FROM Test WHERE Name = " & "'" & _ 
      following & "'" & ";", objConn, adOpenStatic, adLockOptimistic 

Ende der erwarteten Anweisung

ich tun, weil ich möchte das Ergebnis dieser Abfrage in einer Variablen erholen. Wenn der Datensatz existiert, passiert nichts (search_value = 1). Andernfalls geben Sie den Wert der Variablen following ein.

PS: The link which I used for SQL queries.

+0

Dieser Artikel ist von 2008 und zeigt einige ziemlich schlechte Code-Praxis. Wenn Sie VBScript in etwas wie klassischem ASP verwenden, wo es dem Internet ausgesetzt ist, würde ich ernsthaft "ADODB.Command" anstelle von dies mit parametrisierten Abfragen verwenden. – Lankymart

+0

Sicher, aber das funktioniert für mich so ... – leyh

+1

Berühmte letzte Worte ... –

Antwort

1

Wenn Sie die Abfrage für die Datenbank öffnen, werden die Ergebnisse direkt im Recordset-Objekt gespeichert. So zum Beispiel:

objRecordSet.Open "Select * from Table", objConn 

Dies würde alle Ergebnisse in objRecordSet speichern.

können nun auf den Code aussehen:

Dim objConn, objRecordSet, following, today, found, search_value, rst 

Const adOpenStatic = 3 
Const adLockOptimistic = 3 

Set objConn = CreateObject("ADODB.Connection") 
Set objRecordSet = CreateObject("ADODB.Recordset") 

'Database connection  
objConn.Open("DRIVER=SQLite3 ODBC Driver;Database=C:\Users\Quentin\Downloads\Quentin-Classementhashtags.db") 

following = "youyou" 
today = "CURRENT_DATE" 

'Search if a record exists - Old Version 
'Set rst = objRecordSet.Open "SELECT Name FROM Test WHERE Name = '" & _ 
'   following & "';", objConn, adOpenStatic, adLockOptimistic 

'Search if a record exists - New Version 
objRecordSet.Open "SELECT Name FROM Test WHERE Name = '" & _ 
    following & "';", objConn, adOpenStatic, adLockOptimistic 

If (objRecordset.EOF) Then 
    search_value = 0 
Else 
    search_value = 1 
End If 

objRecordSet.Close 

'If the record doesn't exist, insert the value of the variable "following" 
If search_value = 0 Then 
    objRecordSet.Open "INSERT INTO Test (Name, Joined) VALUES " & "('" & _ 
     following & "', " & today & ");", objConn, adOpenStatic, adLockOptimistic 
End If 

objConn.Close 

geben, dass ein Schuss und lassen Sie mich wissen.

+0

danke für Ihre Antwort. Das ist gut. – leyh

Verwandte Themen