Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mein erstes Mal! Query mit SQL und Ads (https://www.delphipraxis.net/198854-mein-erstes-mal-query-mit-sql-und-ads.html)

mjank 5. Dez 2018 14:16

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:
  AdsQuery1.Active := false;
  AdsQuery1.SQL.Clear;
  AdsQuery1.SQL.Add('SELECT * FROM "... richtiger Pfad sehr lang aber richtig ... " ORDER BY Bezeichnung');
  AdsQuery1.Active := true;
"Bezeichnung" ist ein Name einer Spalte in der Tabelle.
Dann bekomme ich aber folgende Fehlermeldung.

Zitat:

Im Projekt ... ist eine Exception der Klasse EADSDatabaseError mit der Meldung 'AdsQuery1: Error 5014: Advantage does not have an index open with the specified handle. The handle must be to an index order.' aufgetreten.
Für den SQL-Teil habe ich schon viele Beispiele gelesen.
Irgendwo hänge ich fest.

joachimd 5. Dez 2018 14:22

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.

mjank 5. Dez 2018 14:33

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"?

RSF 5. Dez 2018 14:48

AW: Mein erstes Mal! Query mit SQL und Ads
 
Zitat:

Zitat von mjank (Beitrag 1420153)
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"?

Das verbundene DBGrid aktualisiert sich selbst bei jeden AdsQuery1.open. ( wenn vorher AdsQuery1.close)

haentschman 5. Dez 2018 15:13

AW: Mein erstes Mal! Query mit SQL und Ads
 
Moin...:P
Wenn du schon anfängst...8-)

besser:
Delphi-Quellcode:
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;
:warn: Immer mit SQL Parametern arbeiten.
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;

joachimd 5. Dez 2018 15:17

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:
procedure TForm1.FormCreate(Sender: TObject);
begin
  AdsConnection1.AliasName := 'test';
  AdsConnection1.connect;
  AdsQuery1.AdsConnection := AdsConnection1;
  DataSource1.DataSet := AdsQuery1;
  DBGrid1.DataSource := DataSource1;
  DBNavigator1.DataSource := DataSource1;
end;
Ein Öffnen der Datenmenge kann zB durch einen Buttonklick erfolgen:
Delphi-Quellcode:
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;
Hier ein Edit1 der Ort und in Edit2 der Name.

mjank 5. Dez 2018 15:29

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.

mjank 9. Dez 2018 15:31

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:
  AdsQuery1.Close;
  AdsQuery1.SQL.Text := 'SELECT Bezeichnung FROM "C:\Projekte\Delphi\Sicotronic\Projekte\Daten\DB_Projekte.ADT"';
  AdsQuery1.Open;
Leider passierte nichts, nichtmal eine Fehlermeldung.

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:
  AdsQuery1.Close;
  AdsQuery1.SQL.Text := 'SELECT * FROM frm_Hauptform.DB_Projekte';
  AdsQuery1.Open;
Dies löst leider eine Exception aus.
Zitat:

... The requested objekt was not found. frm_Hauptform - link object is not supported on free connection. Table name: DB_Projekte' aufgetreten.
Ich hoffe, ihr hapt noch einen Tip für mich.

Heuman 9. Dez 2018 17:07

AW: Mein erstes Mal! Query mit SQL und Ads
 
Zitat:

Zitat von mjank (Beitrag 1420408)
Folgendes habe ich mit der Erwartung versucht,
dass ich in meinem DBGrid nur noch die Spalte "Bezeichnung" habe.

Delphi-Quellcode:
  AdsQuery1.Close;
  AdsQuery1.SQL.Text := 'SELECT Bezeichnung FROM "C:\Projekte\Delphi\Sicotronic\Projekte\Daten\DB_Projekte.ADT"';
  AdsQuery1.Open;
Leider passierte nichts, nichtmal eine Fehlermeldung.

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:
  AdsQuery1.Close;
  AdsQuery1.SQL.Text := 'SELECT * FROM frm_Hauptform.DB_Projekte';
  AdsQuery1.Open;
Dies löst leider eine Exception aus.
Zitat:

... The requested objekt was not found. frm_Hauptform - link object is not supported on free connection. Table name: DB_Projekte' aufgetreten.
Ich hoffe, ihr hapt noch einen Tip für mich.


Hallo,

AdsQuery1.SQL.Text := 'SELECT * FROM DB_Projekte';

sollte funktionieren.

Gruß

joachimd 9. Dez 2018 19:23

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:
http://www.lulu.com/shop/joachim-due...-20385058.html.
Mit zusätzlichen Themen, allerdings auf Basis ADS 9:
http://www.lulu.com/shop/joachim-d%C...-17462909.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz