Autor Beitrag
bockwurst
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 191

win98 /XP
D1 D5 Prof DE2005PE
BeitragVerfasst: Mi 04.05.05 09:13 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
      (* test *)
      AbfrageQuery.SQL.clear;
      s:='INSERT INTO "'+ZielPfad+'\KomBak" ';
      AbfrageQuery.SQL.Add(s);        //1.Zeile

      s:='("Kunden Nr") ';
      AbfrageQuery.SQL.Add(s);       //2.Zeile

      s:='Select A."Kunden Nr" ';
      AbfrageQuery.SQL.Add(s);       //3.Zeile

      S:='FROM KOMMISIO A ';
      AbfrageQuery.SQL.Add(s);       //4.Zeile

      s:='WHERE (A.Status= "nur erfaßt")';
      AbfrageQuery.SQL.Add(s);       //5.Zeile


Der folgende Code bringt den Fehler:
ungültiges Schlüsselwort SymbolString )
Zeilennummer 2

Dieser Fehler kommt immer dann wenn ich einen feldname mit einem Leerzeichen habe.

Was habe ich falsch gemacht
sunspeed
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99

Win 95, Win 98,WinME,W2k Win XP
Delphi 4 Pers,Delphi 7 Prof, Delphi 2005 Arch, VS 2003, VS 2005, C#
BeitragVerfasst: Mi 04.05.05 09:19 
Lass dir das Statement insgesamt anzeigen (z.B. showmessage) und prüfe es wo der Fehler liegen könnte.
Scheint ein Fehler von SQL zu sein.

Du kannst normalerweise auch das SQL Statement direkt an Query.SQL.Text übergeben,
is vielleicht einfacher zu Analysieren.

Hoffe hab dir geholfen

_________________
Tiefe Brunnen muss man graben, wenn man klares Wasser will.
Tiefe Wasser sind nicht still!
Amiga-Fan
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 534



BeitragVerfasst: Mi 04.05.05 09:56 
verstehe ich ehrlich gesagt nicht. Select und Insert gleichzeitig in der Query?
sunspeed
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99

Win 95, Win 98,WinME,W2k Win XP
Delphi 4 Pers,Delphi 7 Prof, Delphi 2005 Arch, VS 2003, VS 2005, C#
BeitragVerfasst: Mi 04.05.05 10:03 
Wie soll dein Statement aussehen?
Wenn es zwei getrennte Statements sein sollen, schick sie seperat an
ausblenden Delphi-Quelltext
1:
Query.SQL.Text					


So machs ichs zumindest immer, dann tu ich mir leichter beim debuggen.

_________________
Tiefe Brunnen muss man graben, wenn man klares Wasser will.
Tiefe Wasser sind nicht still!
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Mi 04.05.05 10:32 
Hallo,

was passiert, wenn Du den Feldnamen zwischen eckige Klammern setzt?
ausblenden Delphi-Quelltext
1:
2:
3:
...
s:='([Kunden Nr]) '
...

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
bockwurst Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 191

win98 /XP
D1 D5 Prof DE2005PE
BeitragVerfasst: Mi 04.05.05 11:18 
@Smiegel: wenn ich den feldanamen in Eckige [] Klammern schreibe kommt eine neue Fehlermeldung: ungültige Schlüsselwort [Kunden

@Sunspeed: ich lasse es mir so anzeigen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
      try
        AbfrageQuery.ExecSQL;
        result:=true;
      except
        on E: Exception do
        begin
          MessageDlg(E.Message, mtError, [mbOk], 0);
          result:=false;
        end;
      end;


@Amiga-Fan: Ich vestehe auch so viel nicht, wenns aber klappt ist es OK
Wenn ich einen anderen Feldanme ohne Leerzeichen z.B. Nummer dan ist alles OK. Select und Insert Into gehen wohl sehr gut (muß sogar gehen) in einer Query.

@sunspeed: es macht wohl keinen Unterschied on ich Ouery.Text oder Ouery.SqL.Add daten einfüge. Allerdings gibt es Probleme mit Params. Die werden wohl nur "akiviert" mit SQL.Add
sunspeed
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99

Win 95, Win 98,WinME,W2k Win XP
Delphi 4 Pers,Delphi 7 Prof, Delphi 2005 Arch, VS 2003, VS 2005, C#
BeitragVerfasst: Mi 04.05.05 11:24 
ich kann mir darunter nix mehr vorstellen :shock:
vielleicht is es ein simpler Fehler sprich, versuch statt den " mal ' vielleicht funzts dann.

_________________
Tiefe Brunnen muss man graben, wenn man klares Wasser will.
Tiefe Wasser sind nicht still!
bockwurst Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 191

win98 /XP
D1 D5 Prof DE2005PE
BeitragVerfasst: Mi 04.05.05 11:32 
@Sunspeed: Ich ahbe alles versucht " '''' ' '''' und nun auch [ aber leider geht es nicht.

normalerweise bräuchte ich das alles gar nicht weil ich nur Daten von einer Datenbank in eine andere kopieren/einfügen will. Die Datenbanken haben die gleiche Struktur/Feldnamen.

Das auch so:
INSERT ZIEL SELECT * QUELLE A
WHERE (A.Status='test')


wenn ich abernnoch abfragen zu einer zweiten Datenbank Abfragen mache, da geht es nicht mehr.

geht nicht mehr:
INSERT INTO ZIEL SELECT * QUELLE A, DetailQuelle B
WHERE (A.Status='test')
AND (A.Name=B.nummer)

dann muß ich hinter Ziel die Feldnamen angeben und den * auch ersetzen durch die Feldnamen
bockwurst Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 191

win98 /XP
D1 D5 Prof DE2005PE
BeitragVerfasst: Mi 04.05.05 11:39 
Das geht!:
INSERT INTO KomBak (nummer)
SELECT A.nummer
FROM Kommisio A


Das nicht:
INSERT INTO KomBak ("Kunden Nr")
SELECT A.("Kunden Nr")
FROM Kommisio A
sunspeed
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99

Win 95, Win 98,WinME,W2k Win XP
Delphi 4 Pers,Delphi 7 Prof, Delphi 2005 Arch, VS 2003, VS 2005, C#
BeitragVerfasst: Mi 04.05.05 11:41 
Ich würd versuchen das ganze zu trennen. Mehr kann ich meinem geistigen Horizont momentan nicht entlocken. Sorry
Nimm zwei Querys für die eine DB und für die andere DB. (Wenn ich das Problem vorher richtig verstanden habe)
Mach ne Abfrage auf der einen DB, schieb die Daten in das Query von der zweiten DB und füg diese ein.

Viel Glück, wenn mir noch was einfällt, werde ich es posten.

:oops:
j-a-n@gmx.de
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84


Delphi 7
BeitragVerfasst: Mi 04.05.05 11:43 
user profile iconbockwurst hat folgendes geschrieben:
@Sunspeed: Ich ahbe alles versucht " '''' ' '''' und nun auch [ aber leider geht es nicht.

normalerweise bräuchte ich das alles gar nicht weil ich nur Daten von einer Datenbank in eine andere kopieren/einfügen will. Die Datenbanken haben die gleiche Struktur/Feldnamen.

Das auch so:
INSERT ZIEL SELECT * QUELLE A
WHERE (A.Status='test')


wenn ich abernnoch abfragen zu einer zweiten Datenbank Abfragen mache, da geht es nicht mehr.

geht nicht mehr:
INSERT INTO ZIEL SELECT * QUELLE A, DetailQuelle B
WHERE (A.Status='test')
AND (A.Name=B.nummer)

dann muß ich hinter Ziel die Feldnamen angeben und den * auch ersetzen durch die Feldnamen


Das sollte trotzdem gehen.
Der Vollständigkeit (und Fehlerprüfung) halber würde ich das aber immer voll ausschreiben. also:

INSERT INTO ziel (status, nummer, name)
SELECT a.status, b.nummer, b.name
FROM quelle a, detailquelle b
WHERE a.Status='test'
AND a.Name=B.nummer

_________________
--
Dieses Werk ist unter einer Creative Commons 3.0 Lizenz lizenziert und darf unter Namensnennung kopiert, weitergegeben, veröffentlicht und verändert werden.
j-a-n@gmx.de
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84


Delphi 7
BeitragVerfasst: Mi 04.05.05 11:43 
user profile iconbockwurst hat folgendes geschrieben:
@Sunspeed: Ich ahbe alles versucht " '''' ' '''' und nun auch [ aber leider geht es INSERT INTO ZIEL SELECT * QUELLE A, DetailQuelle B
WHERE (A.Status='test')
AND (A.Name=B.nummer)


Das sollte trotzdem gehen.
Der Vollständigkeit (und Fehlerprüfung) halber würde ich das aber immer voll ausschreiben. also:

INSERT INTO ziel (status, nummer, name)
SELECT a.status, b.nummer, b.name
FROM quelle a, detailquelle b
WHERE a.Status='test'
AND a.Name=B.nummer

_________________
--
Dieses Werk ist unter einer Creative Commons 3.0 Lizenz lizenziert und darf unter Namensnennung kopiert, weitergegeben, veröffentlicht und verändert werden.
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 04.05.05 11:56 
Wenns auch weh tut, aber so viele Fehler auf einmal zu sehen, daß ist auch schmerzhaft. :mrgreen: Was treibst Du denn da überhaupt ? Du verwechselst Feldnamen mit deren Inhalt. Dann wird ein Insert gemacht ohne Values. Die Identifier müssen aus bestimmten Zeichen bestehen. Ein Leerzeichen darf da nicht rein. Mit den '"´` gibts sicherlich auch noch Ärger. usw. Try and error in Perfektion. 8) Man kann doch nicht nur so lange probieren, bis es geht und dann nicht mal wissen warum überhaupt. Lese das hier mal durch :

www.w3schools.com/sql/sql_insert.asp

_________________
Gruß
Hansa
bockwurst Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 191

win98 /XP
D1 D5 Prof DE2005PE
BeitragVerfasst: Mi 04.05.05 11:58 
@j-a-n@gmx.de: ja, voll ausschreiben, daß habe ich ja versucht. Aber da tritt das Problem mit den Feldnamen auf, die durhc ein Leerzeichen (Kunden Nr) getrennt sind. Wenn du mir sagen könntest, wie ich das lösen könnte.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 04.05.05 12:02 
user profile iconhansa hat folgendes geschrieben:
Dann wird ein Insert gemacht ohne Values.

Hansa er macht ein insert mit einem Select. Da gibts kein "values".
Über Feldnamen mit Leerzeichen hab ich mich aber auch schon aufgeregt. Wer macht denn sowas.

@bockwurst:
Normalerweise steht aber in der Beschreibung zur Datenbank (ist die hier schon genannt worden?), wie man damit umgeht.
Amiga-Fan
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 534



BeitragVerfasst: Mi 04.05.05 12:04 
Zitat:
Hansa er macht ein insert mit einem Select. Da gibts kein "values".


ah jetzt verstehe ich erst was er vorhat. Habe ich bis jetzt noch nie so gesehen...
bockwurst Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 191

win98 /XP
D1 D5 Prof DE2005PE
BeitragVerfasst: Mi 04.05.05 12:11 
@hansa: Bei INSERT INTO muß nicht unebdingt eine VALUES stehen

man kann zwar mit

ausblenden Delphi-Quelltext
1:
2:
3:
SELECT INTO t_art
  (nummer, bezeichnung)
 VALUES(8, "Telefon bei Partner(in)")


eine Abfrage setzen

Doch mit einer Unterabfrage ist es auch getan

Die folgende Anweisung kopiert alle Kunden mit den Kundennummer größer 120 in die Tabelle alte_kunden.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
INSERT INTO alte_kunden (vorname, nachname)
SELECT vorname, nachmae
  FROM kunde
  WHERE nummer > 120


und das geht! aus ohne Values

aus dem Buch: delphi 5, nachschlagen und verstehen / michael Ebner)
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mi 04.05.05 12:38 
Also gut, das mit den values ist dann geklärt. Aber was soll das hier :

user profile iconbockwurst hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
      s:='WHERE (A.Status= "nur erfaßt")';
      AbfrageQuery.SQL.Add(s);       //5.Zeile



Gleich 3 Fehler, die sich eventuell aber gegenseitig aufheben. 8) Wenn ich richtig rate, dann gibt es noch einen Wert, der "erfaßt" heißt. Insofern wäre es ein boolean und 0/1 als smallint oder char würde reichen. Das ß als deutsches Sonderzeichen könnte Ärger machen. Das ganze läßt sich schwieriger sortieren, als nötig. Wieso soll ich einen halben Satz aus der DB lesen wenn eine einzige Zahl ausreicht? Das bläht die DB unnötig auf. Groß/Kleinschreibung macht da keinen Sinn. Die Umwandlung kostet unnötige Zeit. Da "nur erfaßt" in Delphi wohl zum String wird, läßt sich nicht mal Case benutzen. Oder es wird sogar da erst in eine Zahl umgewandelt. :shock:

_________________
Gruß
Hansa
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 04.05.05 12:49 
@Hansa:
Ich glaube du fühlst dich angegriffen. Das wollte sicher keiner.
Deine Anregungen können richtig sein, müssen aber nicht.
Wie du selber schreibst, rätst du ja nur. Ob für Status zwei oder zwanzig Einstellungen möglich sind, wissen wir nicht (du also auch nicht). Und ob nach dem Feld sortiert wird ist auch nicht bekannt. Selbst wenn, ist das "ß" bei richtiger Spracheinstellung der DB auch kein Problem.

Wichtiger wäre zu wissen, welche DB bockwurst verwendet. Dann könnte man eventuell feststellen, wie dort mit Feldnamen, die Leerzeichen enthalten, umgegangen werden muss.
j-a-n@gmx.de
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 84


Delphi 7
BeitragVerfasst: Mi 04.05.05 12:51 
user profile iconbockwurst hat folgendes geschrieben:
@j-a-n@gmx.de: ja, voll ausschreiben, daß habe ich ja versucht. Aber da tritt das Problem mit den Feldnamen auf, die durhc ein Leerzeichen (Kunden Nr) getrennt sind. Wenn du mir sagen könntest, wie ich das lösen könnte.



ALTER TABLE quelle CHANGE `Kunden Nr` kundennr int(11);

:lol: :D :mrgreen: :les: :nut: :rofl:

_________________
--
Dieses Werk ist unter einer Creative Commons 3.0 Lizenz lizenziert und darf unter Namensnennung kopiert, weitergegeben, veröffentlicht und verändert werden.