PDA

Vollständige Version anzeigen : openRecordset mit SQL anweisung


bodo40
30.07.2003, 10:09
hallo

Ein neues unverständliches fänomen für mich.

ich will ein Recordset mit zuhilfenahme eines SQL Strings öffnen. Ich steig mal wieder überhauptnicht durch die HilfeDatei.

hier mein ansatz:

Sub test()
Set Db = CurrentDb
'"SELECT LastName, FirstName FROM Authors
'WHERE LastName = 'Smith';
'SELECT Title, ISBN FROM Titles
'WHERE ISBN Like '1-55615-*'"
'Set Datensatzgruppe = Objekt.OpenRecordset(Quelle, Typ, Optionen, Sperren)
SQL = ""
SQL = SQL & "SELECT EXCH_ZP_HRV.DVG" & vbCrLf
SQL = SQL & "FROM EXCH_ZP_HRV" & vbCrLf
SQL = SQL & "WHERE DVG Like Null;"
Debug.Print SQL
Set R1 = Db.OpenRecordset(SQL, dbOpenDynaset)
Debug.Print R1.Name
End Sub

Also bis hier hin Öffnet mir das Programm ein RecordSet Namens s.SQL-String, aber ich möchte lieber ein RecordSet nach den SQL Kriterien öffnen.

so doch auch nicht
Db.OpenRecordset(("EXCH_ZP_HRV"), dbOpenDynaset,SQL)
dann DatentypKonvertierungsFehler

aber das geht, weiss nur nicht mehr wo ich das schon mal gesehen habe.

kann sich von euch eine(r) daran erinnern?

danke
bodo40

Thomas_Engel
30.07.2003, 10:27
Hi Bodo,

ich würde mal bei dem hier ansetzen:
SQL = ""
SQL = SQL & "SELECT EXCH_ZP_HRV.DVG" & vbCrLf
SQL = SQL & "FROM EXCH_ZP_HRV" & vbCrLf
SQL = SQL & "WHERE DVG Like Null;"

Ich glaube nicht, dass sich Zeilenumbrüche (vbcrlf = visual basic carriage return line feed) in einem SQL-Statement gut vertragen. Ich würde so:
SQL = "SELECT EXCH_ZP_HRV.DVG FROM EXCH_ZP_HRV WHERE DVG Like Null"

Grüsse
Thomas

bodo40
30.07.2003, 10:28
hi
um meine verwirrung zu untermalen, hier das was die Hilfe bitet.

Set Datensatzgruppe = Objekt.OpenRecordset (Quelle , Typ , Optionen, Sperren)

meins:
Set R1 = Db.OpenRecordset(SQL, dbOpenDynaset )

Quelle
Ein Wert vom Typ String, der die Quelle der Datensätze für das neue Recordset-Objekt angibt. Die Quelle kann ein Tabellenname, ein Abfragenname oder eine SQL-Anweisung sein, die Datensätze zurückgibt. Bei Recordset-Objekten vom Typ Tabelle in Microsoft Jet-Datenbanken kann als Quelle nur ein Tabellenname angegeben werden.

was ist nicht gut?

bodo40

bodo40
30.07.2003, 10:33
hi thomas

ich habe das mal so gemacht wie du meintest.
das Ergebnis ist das gleiche.
in einem anderen Posting habe ich mal einen Aufbau eines SQL Strings gelesen der so war wie mein Aufbau. Ich glaube das macht nichts. Aber haut mich wenn ich lüge.

danke
bodo40

bodo40
30.07.2003, 10:44
ich bins selber noch mal

hallo

Wenn ich die SQL anweisung in eine Abfrage kopiere bekomme ich als ergebnis einen Datensatz, obwohl in meiner Tabelle hunderte sind bei denen DVG = Null ist.

check ich nicht

wenn ich DVG = 1 eingebe, dann wird der richtige Datensatz gefunden und angezeigt.

ist hier irgendwo ein WURM drin?

womöglich ich, was?

bodo40

Thomas_Engel
30.07.2003, 10:51
Sub test()
Dim rst as ADODB.Recordset
Dim sql as string
sql = "SELECT EXCH_ZP_HRV.DVG FROM EXCH_ZP_HRV WHERE DVG Like Null;"
Set rst = New ADODB.Recordset
rst.CursorLocation = adUseClient
rst.Open sql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
End Sub

Das müsste klappen

Thomas

Thomas_Engel
30.07.2003, 10:55
und by the way,das hier:
.... WHERE DVG Like Null;"
würde ich tauschen gegen:
.... WHERE DVG is Null"

bodo40
30.07.2003, 11:04
hugh Thomas

wenn ich meine R1 ...
nicht so deklariere

Dim R1 as Recordset

sondern so

Dim R1 as ADODB.Recordset

bekomme ich einen fehler

was ich nicht verstehe.

bodo40

Thomas_Engel
30.07.2003, 11:13
Tschuldige, dann fehlt der Verweis auf ActiveX Data Objects Library. Die habe ich halt standardmässig immer drin. Das findest Du im Visual Basic Editor unter Extras/Verweise

Thomas

bodo40
30.07.2003, 11:18
hi thomas
wie stellt man das den standart mässig ein. ich muss das immer wieder tun.

danke
bodo40

Thomas_Engel
30.07.2003, 11:22
Ha ha ha, ich habe eine leere Datenbank mit diversen eigenen Voreinstellungen. Die benütze ich als Vorlage für neue Datenbanken. Möglicherweise gehts auch anders, aber das ist für mich schon gut so :-)

Klappts denn jetzt?

Thomas

bodo40
30.07.2003, 12:21
hi thomas

jou das klappt, ich verstehe es nur nicht und kann in der access hilfe auch nichts darüber finden. das macht mich traurig, weil ich immer ganz gerne verstehen will was ich mache. Woher kann ich mir da infos holen. weisst du das?

danke
bodo40

Thomas_Engel
30.07.2003, 12:35
Hi Bodo,

ich muss dazu sagen, dass meine Datenbanken meistens nur Tabellen enthalten und äusserst selten Formulare, Berichte oder Code und Abfragen.

Die Bedienung der Datenbank mache ich dann komplett mit Visual Basic. Dadurch habe ich eine saubere Trennung der Bedienung und der Daten. Alles was der Anwender dann sieht, ist ein kompiliertes Programm (*.exe), wo die Datenbank liegt weiss er nicht. Dadurch ist es nicht so leicht, die wertvollen Daten zu manipulieren.
Auch Änderungen an den Bedienungselementen werden für mich sicherer und einfacher.

Wenn Du mehr zu ADO wissen willst, empfehle ich Dir also die VB-Hilfe oder das ADO-Tut von Florian Reischl:
http://www.activevb.de/tutorials/tut_adokurs/adokurs.html
Das ist sehr verständlich geschrieben und doch ziemlich umfassend, ideal für ADO-Einsteiger

Grüsse
Thomas

bodo40
30.07.2003, 12:45
hi thomas

ich hab mal in ein VB buch geschaut. ich hab mir das schon fast gedacht dass du ein VB freak bist. Der Code kommt mir irgendwie grundsätzlicher vor. Finde ich auch sehr interessant, zumal man dann das (bei mir ist es noch so) verwirrende Access nicht mehr hat.

Das mit

R4.Open sql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

lies mich ganz schön stutzen. Sind ja gleich mehrere Böhmische Dörfer für mich.

danke für den link
bodo40

Thomas_Engel
30.07.2003, 13:09
R4.Open sql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

nach dem "Open" kommt [Source], [Connection], [CursorType], [Locktype]

Das findest Du alles in der Hilfe.
Komplett in VB würde die Verbindung zu einer Datenbank "Test.mdb" im selben Verzeichnis wie die EXE so aussehen:

Option Explicit

Public rst As ADODB.Recordset
Public cnn As ADODB.Connection
Public connstr As String
Public sql As String

Private Sub Command1_Click()
Set cnn = New ADODB.Connection
connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Test.mdb;Persist Security Info=False"
cnn.Open connstr
sql = "Select * from Tabelle1"
Set rst = New ADODB.Recordset
rst.Open sql, cnn, adOpenKeyset, adLockOptimistic
'Anzahl gefunder Datensätze melden
MsgBox rst.RecordCount
End Sub

Also Du siehst, es ist eigentlich keine Hexerei.

viel Spass beim Tüfteln

Grüsse
Thomas