Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi 2 kleine problemlichen mit dem Query (https://www.delphipraxis.net/84709-2-kleine-problemlichen-mit-dem-query.html)

mafiaente 20. Jan 2007 13:56

Datenbank: paradox7 • Zugriff über: table,query

2 kleine problemlichen mit dem Query
 
also wie shcon im thema erwähnt! ich hab 2 kleine probleme bzw. fragen:

1. kann es sein, dass das mit dem query bezogen auf ne tabelle nicht funktioniert, wenn diese ein memo-feld beinhaltet? hatte da n prob un das mit dem query hat ewig nich geklappt, erst als ich die datensätze mit dem memo entfernt hatte!

2. ich möchte beim query die funktion SELECT * FROM ... WHERE ...=... nutzen. so auf jeden fall soll nach dem WHERE die eine spalte "kategorie" gefiltert werden. der filterwert müsste demnach ja ein string sein un soll aus einer DBLookUpComboBox stammen, also hätt ich mir gedacht das man die zeile so schreiben kann:

Delphi-Quellcode:
SELECT * FROM artikel WHERE kategorie=DBLookUpComboBox1.keyvalue
bzw.
Delphi-Quellcode:
begin
Query1.Active:=false;
  Query1.Sql.Clear;
  Query1.Sql.Add('SELECT * FROM artikel.db WHERE kategorie=kategorie=DBLookUpComboBox1.keyvalue');
  Query1.Active:=true;
end;
es komtm aber nur die fehlermeldung, "ungültiges schlüsselwort..." ich versteh einfach nich wie ich die abfrage sonst gestalten kann mit der combobox?

hoffe mir kann jmd helfen! thx schonma im vorraus

Christian Seehase 20. Jan 2007 14:02

Re: 2 kleine problemlichen mit dem Query
 
Moin mafiaente,

wie ist es so:

Delphi-Quellcode:
Query1.Sql.Add('SELECT * FROM artikel.db WHERE kategorie='+DBLookUpComboBox1.keyvalue);
?

ManuelR 20. Jan 2007 14:07

Re: 2 kleine problemlichen mit dem Query
 
Hallo,


wenn kategorie ein string ist muss er auf jeden Fall in HOchkommata gesetzt werden

z.B. so:

'Select * from Artikel where Kategorie = ' + #39 + StringVariable + #39

stifflersmom 20. Jan 2007 14:14

Re: 2 kleine problemlichen mit dem Query
 
Zitat:

Zitat von ManuelR
'Select * from Artikel where Kategorie = ' + #39 + StringVariable + #39

finde ich persönlich nicht so schön,
ich benutze imme QuotedStr

also:
Delphi-Quellcode:
'Select * from Artikel where Kategorie = ' + QuotedStr(MeinString);
Moin

ManuelR 20. Jan 2007 14:23

Re: 2 kleine problemlichen mit dem Query
 
Hallo

Zitat:

finde ich persönlich nicht so schön,
Stimmt, aber es kommt dasselbe heraus und darauf kommt ja an.

mafiaente 20. Jan 2007 14:33

Re: 2 kleine problemlichen mit dem Query
 
ok vielen dank füreure schnellen antworten! ich hoffe ich bekomme es jetz hin...

marabu 20. Jan 2007 15:40

Re: 2 kleine problemlichen mit dem Query
 
Hallo,

die beiden Meinungen zur alternativen Parameterübergabe in SQL-Statements möchte ich trotzdem noch kurz aufgreifen:

Zitat:

'Select * from Artikel where Kategorie = ' + #39 + StringVariable + #39
finde ich persönlich nicht so schön, ich benutze imme QuotedStr
Zitat:

Stimmt, aber es kommt dasselbe heraus und darauf kommt ja an.
Es ist keine Frage von Schönheit, für welche dieser Ersatzlösungen (die "beste" Lösung ist der Parameter-Mechanismus der Query) man sich erwärmt. Am Beispiel des Auktionshauses Christie's:

Delphi-Quellcode:
var
  s, x, u: String;
begin
  s := 'Christies''s';
  x := #39 + s + #39; // liefert 'Christie's'
  u := QuotedStr(s); // liefert 'Christie''s'
  if x <> u then
    ShowMessage('Lasst euch kein X für ein U vormachen');
end;
Ohne QuotedStr() wird kein valides Statement produziert, wenn ein Apostroph Bestandteil der Daten ist.

Freundliche Grüße

mafiaente 21. Jan 2007 11:37

Re: 2 kleine problemlichen mit dem Query
 
also das mit dem filtern klappt jetz so wie ich das will, aber schon steh ich vor nem neuen problem!
wenn ich in der ausgangstabelle "artikel.db" daten hinzufüge, gibt der query die nich aus! der bleibt immer auf dem einen stand, die neuen daten werden gar nich berücksichtigt...wo is da der fehler? versteht ihr was ich mein?

mkinzler 21. Jan 2007 11:41

Re: 2 kleine problemlichen mit dem Query
 
Du mußt dem Query sagen, daß er auf Veränderungen reagieren soll, in dem du .RequestLive auf True setzt.

marabu 21. Jan 2007 11:54

Re: 2 kleine problemlichen mit dem Query
 
Hallo Markus,

RequestLive = True ist eine notwendige Voraussetzung für ein erfolgreiches Query.Refresh() - aber ohne ein Refresh() wird es wohl nicht funktionieren.

Freundliche Grüße

mafiaente 21. Jan 2007 11:56

Re: 2 kleine problemlichen mit dem Query
 
hm hab jetz im objektinspektor auf true gesetz, aber keine veränderung :(
un wo muss ich das query1.refresh hinpacken?

marabu 21. Jan 2007 11:59

Re: 2 kleine problemlichen mit dem Query
 
Zitat:

Zitat von mafiaente
... wenn ich in der ausgangstabelle "artikel.db" daten hinzufüge, gibt der query die nich aus! ...

Das wäre doch ein geeigneter Zeitpunkt für ein Query.Refresh - oder?

Freundliche Grüße

mafiaente 21. Jan 2007 12:04

Re: 2 kleine problemlichen mit dem Query
 
hm wo genau kommt das refresh hin? habs jetz vor der anweisung gemacht, aber geändert hat sich nichts!
hm iwie werden die daten in meiner ausgangstabelle durch den query immer gelöscht, kann das iwie sein?

hier nochma der quelltext:
Delphi-Quellcode:
begin
query1.refresh;
Query1.Active:=false;
  Query1.Sql.Clear;
  Query1.Sql.Add('SELECT * FROM artikel WHERE kategorie='+#39+dblookupComboBox1.keyvalue+#39);
Query1.Active:=true;

mkinzler 21. Jan 2007 12:07

Re: 2 kleine problemlichen mit dem Query
 
Wie fügst du den die Daten ein?

mafiaente 21. Jan 2007 12:09

Re: 2 kleine problemlichen mit dem Query
 
die daten füge ich zuvor in einem anderen formular per DBnavigator ein un gelangen auch in die tabelle...also das funktioniert

mkinzler 21. Jan 2007 12:13

Re: 2 kleine problemlichen mit dem Query
 
Trage das .Refresh mal in das .AfterPost-Ereignis der Tabelle ein.

mafiaente 21. Jan 2007 12:20

Re: 2 kleine problemlichen mit dem Query
 
ich soll bei der komponente TTable bei ereignisse bei AfterPost ".refresh" eingeben? da kommt dann ".refresh ist kein gültiger bezeichner"

hm ich hab bei der query bei datesourceName die datasource ausgewählt die sich auch die ausgangstabelle bezieht! kann das der grund sein, dass die daten dauernd gelöscht werden?

sry das ich mich so dumm stelle, aber ich bin noch n ziemlicher anfänger un wäre echt gut wenn ich das noch iwie hinbekommen könnte! thx

mkinzler 21. Jan 2007 12:30

Re: 2 kleine problemlichen mit dem Query
 
Sorry, ich dachte du wärst mit den Konventionen bekannt.
Ich ließ die Bezeichnung der Klasse weg, da Achim es ja vorher schon erläutert hatte, daß es sich um eine Methode des Queries handelt muß deshalb als Query1.Refresh(); geschrieben werden.

mafiaente 21. Jan 2007 12:37

Re: 2 kleine problemlichen mit dem Query
 
also wenn ich das im eingabeformular bei den ereingnissen eingabe ändert sich nichts!
der aktuelle stand sieht jetz aber so aus:
- die daten werden nicht mehr gelöscht (hab ich nun hinbekommen)
- wenn ich daten eingebe liest der query im nächten formular nicht ein (das is das problem)
- wenn ich delphi schließe un neu starte hat der query die neuen daten dann aber auf einma!

ich hoffe diese kleine sache zur vervollständigung kann mir noch übermittelt werden! danke!

mkinzler 21. Jan 2007 12:46

Re: 2 kleine problemlichen mit dem Query
 
In Ereignis welcher Komponente hast du den Code eingefügt?
Wo zeigst du die Daten des Queries an?
Vielleicht hilft ein
Delphi-Quellcode:
Form.Update;

mafiaente 21. Jan 2007 12:52

Re: 2 kleine problemlichen mit dem Query
 
also ich hab das beim ersten formular bei der ttable komponente bei afterpost eignetragen! der query mit ausgabe is dann aufm 2.formular...welches fomular soll ich updaten un an welcher stelle?

mkinzler 21. Jan 2007 13:02

Re: 2 kleine problemlichen mit dem Query
 
Na das 2. nach dem .Refresh()

marabu 21. Jan 2007 14:46

Re: 2 kleine problemlichen mit dem Query
 
Kann es nicht sein, dass bei TableAfterPost() ein Query1.Refresh() eingetragen wurde und damit auf Form1.Query1 verwiesen wurde? Es muss doch Form2.Query1.Refresh() heißen.

Ein Form2.Update() ist nicht nötig, das Aktualisieren der verknüpften visuellen Controls wird bei Query1.Refresh() miterledigt, wenn vorher kein Query1.DisableControls() ausgeführt wurde.

Freundliche Grüße

mafiaente 21. Jan 2007 15:04

Re: 2 kleine problemlichen mit dem Query
 
also an das form 2 hab ich schon gedacht aber es ging halt wie gesagt trotzdem nicht.
auch wenn ich das form1.update im 2.formular unterbringe ändert das nichts an meinem problem :(

marabu 21. Jan 2007 15:16

Re: 2 kleine problemlichen mit dem Query
 
Es ist gar nicht so leicht durch deine Augen zu sehen.

Kannst du dein Projekt (ohne DCU und EXE und backup files) zippen und hier einstellen?
Oder zumindest mal die relevanten Teile hier zeigen?

mafiaente 21. Jan 2007 17:07

Re: 2 kleine problemlichen mit dem Query
 
ok, ich versuche es...
zunächst erkläre ich meine tabellen:

Tabelle1: artikel.db beinhaltet u.a. die spalte namens kategorie
Tabelle2: kategorie.db beinhaltet die einzelnen kategorien

Form1: Eingabe der daten von tabelle1
Form2: Man soll die Kategorie mit Hilfe der DBLookupCombobox, die sich auf tabelle2 beruft, auswählen un mit hilfe des Buttons 'Anzeigen' anzeigen lassen und beinhaltet demnach den query1

beim query ist requestLive:=true gesetzt;

für den Button habe ich nun den Quelltext:
Delphi-Quellcode:
begin
Query1.Active:=false;
  Query1.Sql.Clear;
  Query1.Sql.Add('SELECT * FROM artikel WHERE kategorie='+#39+dblookupComboBox1.keyvalue+#39);
Query1.Active:=true;
end;
in Form1 habe ich außerdem bei der Komponente Table1 das Ereignis 'afterpost' mit
Delphi-Quellcode:
Form2.Query1.Refresh();
belegt

Nun das Problem:
Ich gebe im Form1 einen neuen Artikel ein, er erscheint auch in der Tabelle1 --> gehe ich aber nun ins Form2 un suche den Artikel über die Kategorie, so wird er nicht gefunden.
WICHTIG!!!
schließe ich Delphi un öffne das Projekt neu, so finde der Query auf einmal den zuvor eingegebenen Artikel!

Ich hoffe das sind jetzt genug infos!!!

mkinzler 21. Jan 2007 17:51

Re: 2 kleine problemlichen mit dem Query
 
Der Query hängt auch nicht direkt an der Tabelle sondern an einer Lookupkomponente. Mit was ist sie verbunden?

mafiaente 21. Jan 2007 18:06

Re: 2 kleine problemlichen mit dem Query
 
bei der query hab ich bei DatabaseName das verzeichnis, welches die tabellen beinhaltet! die datasource hab ich freigelassen und der bezug zu lookupcpmbobox is lediglich durch die filteranweisung
Delphi-Quellcode:
Query1.Sql.Add('SELECT * FROM artikel WHERE kategorie='+#39+dblookupComboBox1.keyvalue+#39)
muss zum start des programms der query.active true oder false sein? true oder, weil sonst das refresh beim post nicht geht,oder?

mkinzler 21. Jan 2007 18:11

Re: 2 kleine problemlichen mit dem Query
 
Mit was ist die LookUp-Komponente verknüpft?

mafiaente 21. Jan 2007 18:15

Re: 2 kleine problemlichen mit dem Query
 
mit der ListSource4 (bezieht sich auf die Kategorie tabelle) un ListField (kategorie)
datasource un so is frei

mkinzler 21. Jan 2007 18:21

Re: 2 kleine problemlichen mit dem Query
 
Und wie hast du dann die Inhalte der Liste gesetzt?

mafiaente 21. Jan 2007 18:25

Re: 2 kleine problemlichen mit dem Query
 
naja wie gesagt, da ich listsource auf meine kategorie-tabelle gesetzt hab, stehen in der komponente bei der ausführung all meine 10 kategorien! wenn ich dann eine auswähle un auf den Button klicke, so kommen alle artikel der entsprechenden kategorie, außer die, die ich siet dem start von delphi eingegeben habe! das is ja das komische! alles funktioniert ja, außer die neu eingegebenen artikel

mkinzler 22. Jan 2007 07:03

Re: 2 kleine problemlichen mit dem Query
 
Ich würde die Lookup-ComboBox direkt mit dee Datenquelle von Query1 verknüpfen . Die Abfrage entsprechend anpassen:
Delphi-Quellcode:
Query1.Sql.Add('SELECT * FROM artikel WHERE kategorie=:kat');
und im onChange der Box:

Delphi-Quellcode:
Query1.ParamNyName('kat').value := Table1.FieldBynName('Kategorie').Value;
Query1.Refresh();

mafiaente 22. Jan 2007 16:36

Re: 2 kleine problemlichen mit dem Query
 
also danke nochma für den tipp, aber bei meiner DBLookupcombobox gibt es kein OnChange...wenn ich es bei OnClick mache, dann kommt dass der parameter'kat' nicht gefunden werden kann...
ich würde ja auch die normales combobox nehmen, bei der es OnChange gibt, aber da weiß ich wiederrum nicht wier ich die Kategorien eingelsen bekomme!?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:56 Uhr.

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