Entwickler-Ecke

Datenbanken - allgemeiner SQL-Fehler?


D. Annies - So 29.06.08 13:01
Titel: allgemeiner SQL-Fehler?
Hi, Delpher,

wer kann helfen?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
with form1.QSchueler do
  begin
    Close; SQL.Clear;
      SQL.Text := format('CREATE INDEX IDX_NA_VN on "%s" (Name, Vorname)', [form1.TbSchueler.tablename]);
    ExecSQL;
  end;
  showmessage('Fertig');


Fehlermeldung siehe oben, kein Meckern beim Compiler.

Danke,
Detlef


mkinzler - So 29.06.08 13:15

Ich würde (SQL-)Parameter verwenden


D. Annies - So 29.06.08 18:39

Hi, Markus,

vielen Dank für deine schnelle Antwort, habe sie erst jetzt gelesen - wenn ich nur wüsste, was SQL-Parameter sind. :roll:

Detlef


mkinzler - So 29.06.08 18:55


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
with form1.QSchueler do
  begin
    Close; 
      SQL.Text :='CREATE INDEX IDX_NA_VN on :table (Name, Vorname)';
      SQL.ParamByName('tab').Value := form1.TbSchueler.tablename;
    ExecSQL;
  end;
  showmessage('Fertig');


D. Annies - So 29.06.08 19:04

Hi, Markus,

leider: Undefinierter Bezeichner: ParamByName

Gruß, Detlef


D. Annies - So 29.06.08 19:14

Hi, Markus,

ich habe jetzt SQL vor parambyname weggelassen, compiliert, aber jetzt kommt:
Parameter 'table' nicht gefunden.

Detlef


mkinzler - So 29.06.08 19:25

Man(ich) sollte die Bezeichnung auch durchgehend beibehalten

Delphi-Quelltext
1:
SQL.Text :='CREATE INDEX IDX_NA_VN on :tab (Name, Vorname)';                    


D. Annies - So 29.06.08 19:41

Hi, Markus, das hatte ich schon gesehen und beidesmal auf tab geändert, aber mit der
obigen Fehlermeldung. (grr)

Gruß, Detlef


mkinzler - So 29.06.08 19:49

Versuch mal SQL.Text :='CREATE INDEX IDX_NA_VN on '+ QoutedStr(form1.TbSchueler.tablename)+' (Name, Vorname)';


D. Annies - So 29.06.08 20:01

Hi, Markus: Allgemeiner SQL-Fehler, Syntax Error (QuotedString habe ich verbessert)
Detlef


alzaimar - So 29.06.08 22:23

Wieso ist der Tabellenname ein Stringparameter? :wink: Vielleicht einfach mal die Hochkommata/Gänsefüschen weglassen und vielleicht in [] einklammern.

SQL-Anweisung
1:
CREATE INDEX indexname ON Tabelle (Spalte1,...)                    


D. Annies - So 29.06.08 22:55

Hi, Alzaimer,

leider gehen auch diese beiden Möglichkeiten nicht. [Fast alles geht?]

Gruß,
Detlef


alzaimar - Mo 30.06.08 08:12

Ich glaube, das Problem liegt nicht in der Syntax, sondern am DB-Zugriff. Die DB kannst Du erreichen, ja? auch über ADO? Dann versuch das mal über ADO. Laut Recherche ist der Fehler "allgemeiner SQL-Fehler" eben KEIN Syntax-Problem, sondern ein Verbindungs-/Konfigurationsproblem.

Übrigens: "Alles geht", fragt sich manchmal nur: Wann.


D. Annies - Mo 30.06.08 18:27

Hi, Alzaimer,

danke für deine Recherche, bzw. deine weiteren Bemühungen. Ich werde mal so vorgehen und melde mich dann wieder. P.S. du hast ja so recht: alles geht-aber wann - aber wir sind ja auch frustrationstolerant und hartnäckig!

So long,
Detlef


D. Annies - Mo 30.06.08 19:37

Hi, Delpher, (besonders die Helfer: mkinzler, alzaimer)

einmal festhalten:

Ich habe jetzt den Index nur für Name gesetzt, also nicht mehr zusammengesetzt Name;Vorname - und siehe da, so klappt es.

Muss ich denn jetzt die Indizes nacheinander setzen, also erst für Name, dann für Vorname?

Danke für weitere Hilfe,
Detlef


mkinzler - Mo 30.06.08 19:51

Wenn du nach der Kombination Name und Vorname suchen willst, müssen auch beide Felder in einem Index vorhanden sein

http://info.borland.com/devsupport/bde/bdeapiex/dbiaddindex.html


D. Annies - Mo 30.06.08 22:45

Hi, Markus - Danke!

Aber, sehe ich das richtig, ich kann keinen mehrfachen Index für eine DBase/FoxPro-Tabelle vergeben, sondern nur für eine Paradox-Tabelle - oder habe ich etwas übersehen?
(Beispiel 1 - 4)

Gruß, Detlef (Frage fast beantwortet ...)


mkinzler - Di 01.07.08 06:35

Verwende mal statt der BDE den FoxPro-ODBC-Treiber. Das Indexformat von FoxPro unterscheidet sich von dem Der BDE (Mutli-Index)


D. Annies - Di 01.07.08 10:15

Hi, Markus

lies mal bitte:

Der INDEX ON Befehl wird in dem Visual FoxPro-ODBC-Treiber nicht unterstützt. Das Erstellen regulärer Indexe für vorhandene Tabellen über den ODBC-Treiber, der den ALTER TABLE-Befehl verwendet, ist jedoch möglich. Das erstellt eine permanente Beziehung auf derselben Tabelle oder anderem, um durchzuführen, dann mit der Klausel SPEICHER arbeitet Umbruch die Beziehung mit der Klausel "DROP FOREIGN KEY" jedoch damit bleiben den Tag erhalten.

Alles klar?

Gruß, Detlef


mkinzler - Di 01.07.08 11:21

Ich würd es trotzdem mal per ADO probieren


D. Annies - Di 01.07.08 18:15

Lieber Markus,

leider habe ich mit ADO gar keine Erfahrung - und nun kann ich ja schlecht erwarten, dass du mir den Code dafür "hinknallst", deshalb werde ich das wohl "begraben". Immerhin kann ich ja einen Index für eine normale DBase-Datei erzeugen, und ansonsten gibt's ja noch die Queries. Übrigens , ist es richtig, dass nach dem Index-Setzen die Tabelle nicht nach Name sortiert zu sehen ist?

Danke soweit,
Detlef


mkinzler - Di 01.07.08 19:02

Der Zugriff über ADO geht grundsätzlich ähnlich, wie mit der BDE
http://www.delphi-treff.de/tutorials/datenbanken/flexible-ado-connection-zur-ansteuerung-einer-access-datenbank/ ist zwar für Access geht aber mit anderen Ado-Quellen recht einfach.
Ich würde dire aber von dBase und anderen Desktop-Datenbanken abraten und gleich zu einem richtigen DBMS raten


D. Annies - Mi 02.07.08 09:04

Hi, Markus,

eigentlich habe ich dir schon gestern geantwortet, aber das hat nicht geklappt. Nun noch einmal: Leider habe ich keine Ahnung von ADO und ich kann ja nun nicht erwarten, dass du mir den Code so hinschreibst-deshalb werde ich wohl auf diese Möglichkeit verzichten. (müssen)

Danke, Detlef

Ups: Hatte nicht gesehen, dass wir schon auf Seite 2 sind ...