![]() |
Datenbank: ADS • Version: 10.00.0.3 • Zugriff über: Query und SQL
Mein erstes Mal! Query mit SQL und Ads
Zur Verwaltung von Projektdaten habe ich eine Datenbank erzeugt.
Diese wird aktuell von einer Mitarbeiterin mit einer einfachen Software gefüllt. - neuer Datensatz - viele Eingabefelder - speichern ... Nun will ich die Daten natürlich auch nutzen. Dazu benötige ich Such- und Sortierfunktionen. Mal will ich nur einen bestimmten Datensatz finden, mal will ich alle Projekte mit einem bestimmten Vermerk finden. Dazu habe ich nach vielem Lesen AdsQuery mit SQL-Zugriff versucht. Ich glaube die Möglichkeiten an Spalten anzeigen oder nicht, sortieren und filtern habe ich erkannt. Derzeit scheitere ich glaube an einem Kreuzchen, dass ich irgendwo vergessen habe. Es gibt bereits: - AdsConnection - AdsTable - DataSource - DBGrid Damit funktioniert das Anlegen und das Füllen der Datensätze. Nun habe ich ein AdsQuery eingefügt und versuche mich an einfachsten Funktionen und scheitere. :cry: AdsConnection, DatabaseName, DataSource und MasterSource des AdsQuery sind mit den anderen Komponenten verbunden.
Delphi-Quellcode:
"Bezeichnung" ist ein Name einer Spalte in der Tabelle.
AdsQuery1.Active := false;
AdsQuery1.SQL.Clear; AdsQuery1.SQL.Add('SELECT * FROM "... richtiger Pfad sehr lang aber richtig ... " ORDER BY Bezeichnung'); AdsQuery1.Active := true; Dann bekomme ich aber folgende Fehlermeldung. Zitat:
Irgendwo hänge ich fest. |
AW: Mein erstes Mal! Query mit SQL und Ads
Datasource und Mastersource der Query brauchst Du nicht verbinden.
Wenn die AdsConnection verbunden ist, kann auch der Pfad im SQL Statement komplett entfallen. |
AW: Mein erstes Mal! Query mit SQL und Ads
Mit dem langen Pfad kam "an dieser Stelle" erstmal keine Fehler, werde ich noch ändern.
Ich habe jetzt Datasource und Mastersource im Query gelöscht. Jetzt kommt erstmal keine Fehlermeldung, es passiert aber auch sonst nichts. Ich möchte bei der Suche die Menge an Datensätzen schrittweise reduzieren, in dem ich nach und nach Bedingungen hinzufüge. z.B.: 1. nur Projekte in Berlin (zu viele Datensätze) 2. nur Kunden die Meier heißen (nur noch wenige Datensätze) usw. Dazu sollen die jeweils übrig gebliebenen Datensätze im DBGrid angezeigt werden. Muss ich das DBGrid dazu "aktualisieren"? |
AW: Mein erstes Mal! Query mit SQL und Ads
Zitat:
|
AW: Mein erstes Mal! Query mit SQL und Ads
Moin...:P
Wenn du schon anfängst...8-) besser:
Delphi-Quellcode:
:warn: Immer mit SQL Parametern arbeiten.
AdsQuery1.Close; // imho nicht nötig
AdsQuery1.SQL.Text := 'SELECT * FROM "... richtiger Pfad sehr lang aber richtig ... " ORDER BY Bezeichnung'; // .Text setzt auch alle Parameter, wenn verwendet, zurück. SQL.Add nur wenn das SQL aus verscheidenen Teilen zusammengesetzt wird. AdsQuery1.Open;
Delphi-Quellcode:
AdsQuery1.Close; // imho nicht nötig
AdsQuery1.SQL.Text := 'SELECT * FROM TableXXX where SpalteX = %s ORDER BY Bezeichnung'; // .Text setzt auch alle Parameter, wenn verwendet, zurück. SQL.Add nur wenn das SQL aus verscheidenen Teilen zusammengesetzt wird. AdsQuery1.ParamByName.AsString := 'Bedingung Wert'; AdsQuery1.Open; |
AW: Mein erstes Mal! Query mit SQL und Ads
Wie Ronald geschrieben hat, sollte sich das Grid selbständig aktualisieren. Hier einmal ein Testaufbau, jegliche Verknüpfung erfolgt zur besseren Darstellung in FormCreate (absichtlich alle Namen auf den automatisch vergebenen gelassen!):
Delphi-Quellcode:
Ein Öffnen der Datenmenge kann zB durch einen Buttonklick erfolgen:
procedure TForm1.FormCreate(Sender: TObject);
begin AdsConnection1.AliasName := 'test'; AdsConnection1.connect; AdsQuery1.AdsConnection := AdsConnection1; DataSource1.DataSet := AdsQuery1; DBGrid1.DataSource := DataSource1; DBNavigator1.DataSource := DataSource1; end;
Delphi-Quellcode:
Hier ein Edit1 der Ort und in Edit2 der Name.
procedure TForm1.Button1Click(Sender: TObject);
var where: string; begin AdsQuery1.Close; AdsQuery1.SQL.Text := 'select * from projekt'; if Length(Edit1.Text)>0 then where:='(ort like :ort)'; if length(Edit2.Text)>0 then begin if length(where)>0 then where := where+' AND '; where:= where+'(name like :name)'; end; if length(where)>0 then AdsQuery1.sql.add('WHERE '+where); AdsQuery1.SQL.Add('order by bezeichnung'); if AdsQuery1.Params.FindParam('ort')<>nil then AdsQuery1.ParamByName('ort').AsString := Edit1.Text+'%'; if AdsQuery1.Params.FindParam('name')<>nil then AdsQuery1.ParamByName('name').AsString := Edit2.Text+'%'; AdsQuery1.Open; end; |
AW: Mein erstes Mal! Query mit SQL und Ads
Danke für die viele schnelle Hilfe.
Ich muss jetzt mal schnell auf die Autobahn. Bin zwei Tage zum Arbeiten weg. Ich hoffe ich komme an Samstag dazu, weiter daran zu arbeiten. Gebe dann Rückmeldung. |
AW: Mein erstes Mal! Query mit SQL und Ads
Folgendes habe ich mit der Erwartung versucht,
dass ich in meinem DBGrid nur noch die Spalte "Bezeichnung" habe.
Delphi-Quellcode:
Leider passierte nichts, nichtmal eine Fehlermeldung.
AdsQuery1.Close;
AdsQuery1.SQL.Text := 'SELECT Bezeichnung FROM "C:\Projekte\Delphi\Sicotronic\Projekte\Daten\DB_Projekte.ADT"'; AdsQuery1.Open; Ich habe in der Form "frm_Hauptform" eine AdsConnection "AdsConnection_Daten", eine AdSTable "DB_Projekte" und eine DataSource "DS_Projekte". Was muss ich ansprechen, wenn ich meinen String "C:\Projekte..." ersetzen will. Ich habe es mit folgendem Code versucht:
Delphi-Quellcode:
Dies löst leider eine Exception aus.
AdsQuery1.Close;
AdsQuery1.SQL.Text := 'SELECT * FROM frm_Hauptform.DB_Projekte'; AdsQuery1.Open; Zitat:
|
AW: Mein erstes Mal! Query mit SQL und Ads
Zitat:
Hallo, AdsQuery1.SQL.Text := 'SELECT * FROM DB_Projekte'; sollte funktionieren. Gruß |
AW: Mein erstes Mal! Query mit SQL und Ads
Ich glaube, das fehlt es schon an den Grundlagen. Normalerweise mache ich ungern Eigenwerbung, aber das könnte was für Dich sein:
![]() Mit zusätzlichen Themen, allerdings auf Basis ADS 9: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 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