PDA

Vollständige Version anzeigen : SQL Vergleich


frogi
22.03.2006, 20:46
Guten Abend ! :rolleyes:

Meine Frage:

Ich öffne einen Recordset per SQL und möchte vergleichen ob es den Datensatz im Me!Textfeld schon gibt.
Wenn ja, dann AddNew sonst exit sub.

Wie geht das bitte, ich habe es leider vergessen,

danke frogi

Großer Meister
22.03.2006, 21:03
wenn es den Datensatz schon gibt, macht es doch keinen Sinn ihn nochmal anzufügen.
Ich verstehe nicht ganz, was du möchtest.

frogi
22.03.2006, 21:07
Großer Meister ?

Ich möchte ja wissen ob es diesen Datensatz schon gibt, sonst bräuchte ich ja zu frage (per SQL)

LG frogi

Großer Meister
22.03.2006, 21:10
nenne mal bitte die betroffenen Tabellen. Sonst ist das schwierig zu erklären.

Großer Meister
22.03.2006, 21:13
also, normal würde man einen Datensatz anfügen wenn er nicht vorhanden ist.
und nicht andersherum. Deswegen frage ich.
und was meinst du mit diesem Satz:
sonst bräuchte ich ja zu frage?

frogi
22.03.2006, 21:17
Also ich habe eine Tabelle (Personen) mit zwei Felder (VName und ZName) dazu ein ungebundenes Formular mit eben diesen Feldern.
Ich gebe zB. Franz Meier ein (in das Form), jetzt möchte ich per SQL fragen. Öffne den Recordset (Personen) schaue ob es Franz Meier schon gibt, wenn ja exit Sub sonst AddNew.

Danke für die Hilfe frogi

Großer Meister
22.03.2006, 21:19
achso, das ist schon verständlicher.

frogi
22.03.2006, 21:22
Und kannst du mir jetzt helfen?

Danke

Großer Meister
22.03.2006, 21:22
dim rst as recordset
set rst = currentdb.openrecordset("SELECT * FROM Personen
WHERE Vorname & Nachname ='" & me!Vorname & me!Nachname & "'")
if (rst.bof and rst.eof) then
rst.addnew
rst.vorname=me!Vorname:rst.nachname=me.Nachname
rst.update
endif

frogi
22.03.2006, 21:27
Danke, liebe Grüße nach Hamburg!

frogi

frogi
24.03.2006, 13:05
Hallo,

jetzt habe ich eine Nacht darüber geschlafen, aber so richtig zufrieden kann ich mit der Hilfe vom großen Meister nicht sein. Wenn ich den den Code richtig verstehe, wird der Recordset geöffnet und schaut nach, ob es diesen Datensatz gibt. Wenn es den Datensatz aber nicht gibt soll er neu angelegt werden, aber das funktioniert so nicht


Bitte Hilfe, euer frogi

Großer Meister
24.03.2006, 13:15
Ich löse die Probleme meistens selber, wenn es noch Rückfragen gibt, du kannst mich also ruhig auch ansprechen. :grins:
dim rst as recordset
set rst = currentdb.openrecordset("SELECT * FROM Personen
WHERE Vorname & Nachname ='" & me!Vorname & me!Nachname & "'")
if (rst.bof and rst.eof) then
rst.addnew
rst("vorname")=me!Vorname:rst("nachname")=me.Nachname:...
rst.update
endif
Falls noch nicht vorhanden, einen Verweis auf die Microsoft DAO Object Library setzen und in dem Fall Neudimensionieren des Recordsets.

Anne Berg
24.03.2006, 13:30
rst.vorname=me!Vorname:rst.nachname=me.NachnameAchtet bitte auf die korrekte Syntax. Bei Formularen mag das ja noch klappen mit Punkt oder Rufzeichen, aber beim Recordset musst du die Feldnamen zwingend mit einem Ausrufezeichen einleiten.

Wer das nicht lernen mag, sollte sich folgende Syntax angewöhnen:
Me("feldname") bzw. RS("feldname")

Großer Meister
24.03.2006, 13:39
@Anne: das weiss ich doch Anne, habe es schon korrigiert. Bitte gib mir ein bisschen mehr Zeit meine Fehler zu korrigieren. Du wärst fast schneller gewesen als ich.

Anne Berg
24.03.2006, 13:54
sorry... :cool:

Großer Meister
24.03.2006, 16:07
schon ok. Ich gebe zu, wenn frogi nicht noch mal nachgefragt hätte, wäre es mir wohl nicht aufgefallen.

frogi
24.03.2006, 17:27
Es tut mir leid, aber es geht noch immer nicht.

Ich möchte es nocheinmal erklären um was es mir geht.

1. Tabelle wurde mit ID, VName, ZName angelegt.
2. Tabelle wurde mit Adress_Test gespeichert und einige VNamen und ZNamen eingegeben.
3. Ungebundes Form erstellt mit:

ID,TXT Feld VNamen, TXT Feld ZName, Schaltfläche mit Code von Großer Meister.

Gebe ich einen neuen VNamen und ZNamen ein und drücke die Schaltfläche speichern läuft nichts.

Bitte wie geht es weiter,

danke frogi

Großer Meister
24.03.2006, 17:45
also wenn du die Tabelle als Adress_Test gespeichert hast und meinen Code benutzt und dort die Tabelle Personen nennst, kann es natürlich nicht gehen.
kannst du die DB mal posten?

frogi
24.03.2006, 17:51
@ Großer Meister!

Also ich habe natürlich die Namen der Tabellen und auch der Felder an deinen Code angepasst.

Es läuft trotztem nicht.

Vielleicht kann sich ja Anne ein wenig um uns kümmern.

Danke,


frogi

Nouba
24.03.2006, 17:54
Bitte wie geht es weiterWir erraten jetzt den verwendeten Kode und sagen Dir, wo die Fehler sind.

PS: Zumindest kann man mal einen Haltepunkt im Kode setzen und den Einzelschritt-Modus danach verwenden, um den Ablauf zu erforschen.

frogi
24.03.2006, 18:00
Danke Nouba!

Ich kann keinen Haltepunkt setzen, beim Test bleibt der gelbe Balken am Beginn der Proc stehen und sagt:

Methode oder Datenobjekt nicht gefunden.

Bei rst.VName


Danke für deine Hilfe, frogi

frogi
24.03.2006, 18:08
Hallo, Hallo !


Ich habe es gefunden:

Nach AddNew habe ich Rufzeichen anstelle des Punktes gesetzt, siehe da es läuft wie gewünscht.

Danke für die Mühe @ Großer Meister
Danke liebe Anne für den Hinweis mit . und !

Noube du machst es mit deine coolen Art wie immer. Sag trinkstdu gerne Wein?
Wenn ja könnte ich dir ein gutes Fläschen zukommen lassen.

LG Klaus

Bitte Anfrage schließen, ich wurde geholfen.

Großer Meister
24.03.2006, 18:08
es heisst rst("VName")
das war doch genau die Sache, die ich dann noch korrigiert habe.

frogi
24.03.2006, 18:16
@ Großer Meister!

Ja es war der Punkt, aber es sollte ein Rufzeichen sein.

Ich danke dir, liebe Grüße frogi

Großer Meister
24.03.2006, 18:22
@ frogi

bitteschön,
wenn du ein Ausrufezeichen verwendest, musst du aufpassen, wenn sich Leerzeichen im Feldnamen befinden, deswegen benutze ich lieber die oben genannte Schreibweise:
also
rst("VName")
anstatt
rst!VName

frogi
24.03.2006, 18:26
D A N K E !