![]() |
ADO, Access und das alles vergleichen
Hallo,
ich habe ein Programm, das bisher über ADO neue Datensätze in eine AccessDB einfügt. Nun ist gefordert, das vor dem Eintrag in der DB geschaut wird, ob ein ähnlicher Datensatz schon vorhanden ist. Wenn ja, soll er angezeigt werden und auf Wunsch überschrieben werden. Vorschläge? |
Re: ADO, Access und das alles vergleichen
Ein DataSet mit dem passenden SQL, wenn Satz gefunden, dann ändern... :gruebel:
|
Re: ADO, Access und das alles vergleichen
:wiejetzt:
also det SQL-Statement krieg ich ja noch hin, aber zu allem anderen bin ich heut kognitiv nicht mehr fähig und generell sind meine Delphifähigkeiten für deine Aussage nicht ausgeprägt genug. Zu deutsch: Schön wär der fertige Code. :roll: |
Re: ADO, Access und das alles vergleichen
Ein ADODataSet auf's Form usw...
Delphi-Quellcode:
try
ADODataSet1.CommandText := 'SELECT hier, dort FROM irgendwas WHERE dies AND das'; ADODataSet1.Open; if ADODataSet1.RecordCount > 0 then begin ADODataSet1.Edit; ADODataSet1.FieldValues['hier'] := 'irgendwas'; ADODataSet1.FieldValues['dort'] := 'irgendwas anderes'; ADODataSet1.Post; end; finally ADODataSet1.Close; end; |
Re: ADO, Access und das alles vergleichen
Des sieht doch jut aus. :-D
Danke erst einmal. Ich versuch das grad mal ein bisschen anzupassen. |
Re: ADO, Access und das alles vergleichen
Oh, btw... HERZLICH WILLKOMMEN IN DER :dp: :hi:
|
Re: ADO, Access und das alles vergleichen
Hmm. Habe grad gemerkt, das ich gar kein DataSet habe, bisher ging alles über ADOTable.
Da muß ich wohl noch eins reinbasteln. Aber mir ist eingefallen, wie kann ich denn den Output in einer Messagebox ausgeben? Aber jetzt jeh ick erstmal heeme. bis morgen. |
Re: ADO, Access und das alles vergleichen
Nun stellt sich die Frage, wie bekomme ich meine Variablen in den SQL Ausdruck, und wie kann ich, sofern es passende Datensätze gibt, diese dem Nutzer anzeigen?
|
Re: ADO, Access und das alles vergleichen
Zitat:
So wird ein Datensatz eindeutig identifiziert.
Delphi-Quellcode:
ADOQuery1.SQL.Text := 'SELECT * FROM Tabelle WHERE pkeyfeld=:pkeyfeld';
ADOQuery1.Parameters.ParamValues['pkeyfeld'] := akt_pkey; ADOQuery1.Open; // die Abfrage kann entweder leer sein oder liefert genau 1 Datensatz if ADOQuery1.IsEmpty then begin // neuen Datensatz einfügen ADOQuery1.Insert; ADOQuery1.FieldValues['pkeyfeld'] := akt_pkey; ADOQuery1.FieldValues['Feld2'] := 'irgendwas anderes'; ADOQuery1.Post; end else begin // form2 ist ein Hilfsformular, dass die Datenfelder eines Datensatzen anzeigt // der Benutzer kann entweder OK oder Abbrechen klicken form2.Dataset := ADOQuery1; if form2.ShowModal = mrOK then begin // bestehender Datensatz überschreiben ADOQuery1.Edit; // alle Felder bestücken mit Ausnahme des pkeyfeld ADOQuery1.FieldValues['Feld2'] := 'irgendwas anderes'; ADOQuery1.Post; end else ShowMessage('Daten wurde nicht überschrieben'); // später weglassen end; ADOQuery1.Close; |
Re: ADO, Access und das alles vergleichen
Danke, aber geht auch ohne Schlüssel? Ich hab zwar einen, aber den kann ich nicht benutzen.
Es sollen Werte in zwei Spalten gesucht werden. In einer Spalte der genaue Werte in der anderen mit einer Toleranz von 10% (SQL-Statement hab ich schon). Wenn dem so ist soll der geasamte Datensatz angezeigt werden, mit der Option des überschreibens, ansonsten soll ein neuer hinzugefügt werden. Das Einfügen haben wir ja schon. :) |
Re: ADO, Access und das alles vergleichen
Zitat:
Also musst du bei vorhandenen Datensätzen diese in einem DBGrid anzeigen lassen. Der Benutzer wählt dann den Datensatz im Grid, den er überschreiben möchte und klickt dann OK oder Abbrechen. Das Formular zum Auswählen des Datensatzes, der überschrieben werden soll ist ganz einfach zusammengeklickt: ein DBGrid, ein DataSource, 2 BitButtons mit ModalResult mrOK und mrAbort |
Re: ADO, Access und das alles vergleichen
Na dann probier ich das mal aus.
Danke. |
Re: ADO, Access und das alles vergleichen
Sooo.
Delphi-Quellcode:
...
begin form2.Dataset := ADOQuery1; if form2.ShowModal = mrOK then ... Nun bekomm ich folgenden Meldung: [Fehler] Undefinierter Bezeichner: 'Dataset1' :?: :?: :?: |
Re: ADO, Access und das alles vergleichen
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
doch leider bekomm ich den unten angefügten fehler
begin
SQLDurchmesser1 := Nutzdurchmesser.Value - (Nutzdurchmesser.Value*0.1); SQLDurchmesser2 := Nutzdurchmesser.Value + (Nutzdurchmesser.Value*0.1); SQLStatement1 := 'SELECT Probeglaeser.SollRadius, Probeglaeser.IstRadius, Probeglaskennzeichnung.Kennzeichnungsname, Probeglaeser.PGlasKonvex, Probeglaeser.PGlasKonkav, Probeglaeser.PruefdmKonkav, '; SQLStatement2 := 'Probeglaeser.PruefdmKonvex, Messart.Messartname, Probeglaeser.Pruefdatum, Probeglaeser.Pruefer, Probeglaeser.Bemerkungen, Probeglaeser.Passe, Probeglaeser.PHDifferenz FROM Probeglaeser, Messart, '; SQLStatement3 := 'Probeglaskennzeichnung WHERE Probeglaeser.IstRadius = DBIstRadius AND ((Probeglaeser.PGlasKonvex >= SQLDm1 AND Probeglaeser.PGlasKonvex <= SQLDm2) OR (Probeglaeser.PGlasKonkav '; SQLStatement4 := '>= SQLDm1 AND Probeglaeser.PGlasKonkav <= SQLDm2)) AND Probeglaeser.Kennzeichnung = Probeglaskennzeichnung.ID AND Probeglaeser.Messart = Messart.ID ORDER BY Messart.ID;'; ADOQuery1.SQL.Text := 'SQLStatement1 + SQLStatement2 + SQLStatement3 + SQLStatement4'; ADOQuery1.Parameters.ParamValues['SQLDm1'] := SQLDurchmesser1; ADOQuery1.Parameters.ParamValues['SQLDm2'] := SQLDurchmesser2; ADOQuery1.Open; |
Re: ADO, Access und das alles vergleichen
Zitat:
Dann müsste dir doch auffallen, dass obige markierte Anweisung falsch ist. (die Hochkommas!!) |
Re: ADO, Access und das alles vergleichen
Zitat:
Delphi-Quellcode:
und det jet erstmal.
ADOQuery1.SQL.Text := 'SELECT * FROM Probeglaeser, Messart, Probeglaskennzeichnung WHERE Probeglaeser.IstRadius = '+ floattostr(DBIstRadius) +' AND ((Probeglaeser.PGlasKonvex >= '+ floattostr(SQLDurchmesser1) +' AND Probeglaeser.PGlasKonvex <= '+ floattostr(SQLDurchmesser2) +') OR (Probeglaeser.PGlasKonkav >= '+ floattostr(SQLDurchmesser1) +' AND Probeglaeser.PGlasKonkav <= '+ floattostr(SQLDurchmesser2) + ')) AND Probeglaeser.Kennzeichnung = Probeglaskennzeichnung.ID AND Probeglaeser.Messart = Messart.ID ORDER BY Probeglaeser.IstRadius;';
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz