![]() |
Datenbank: dbexpress • Version: 5 • Zugriff über: -
select anweisung
hallo,
ich habe eine frage wenn in eine select anweisung ein feld selectiere dann ist alles ok. Also folgede code lauft ohne problem:
Delphi-Quellcode:
aber bei der folgende code:
sqlquery1.sql.Clear;
SQLquery1.SQL.Text := 'Select sum(poso) as poso from history group by user'; sqlquery1.open; SQLquery1.First; while not SQLquery1.EOf do begin stringgrid1.Cells[2,i] := floattostr(SQLquery1.Fieldbyname('poso').asfloat); SQLquery1.Next; i:=i+1; end;
Delphi-Quellcode:
kann nicht das feld 'poso' nicht finden.
sqlquery1.sql.Clear;
SQLquery1.SQL.Text := 'Select user,sum(poso) as poso from history group by user'; sqlquery1.open; SQLquery1.First; while not SQLquery1.EOf do begin stringgrid1.Cells[3,i] := SQLquery1.Fieldbyname('user').asstring; stringgrid1.Cells[2,i] := floattostr(SQLquery1.Fieldbyname('poso').asfloat); SQLquery1.Next; i:=i+1; end; wieso? Entschuldingen sie mir fuer meine deutsche Sprache |
AW: select anweisung
If English is easier for you, it is perfectly okay to ask in English here. I'll continue in it, presuming that it will at least yield better results for you when running it through a translator.
It might be, that the field name "user" is considered a reserved word by your database engine, and the select statement fails or produces unexpected results. Escaping it and maybe giving it an alias could help. I am not entirely sure though, because I have no experience with dbexpress. If you have some external querying tool, trying to execute that exact statement might also reveal what is wrong with it, or what names the fields are given to in the end. |
AW: select anweisung
Try this
Delphi-Quellcode:
sqlquery1.sql.Clear;
SQLquery1.SQL.Text := 'Select his.user user_,sum(his.poso) as poso from history his group by his.user'; sqlquery1.open; SQLquery1.First; while not SQLquery1.EOf do begin stringgrid1.Cells[3,i] := SQLquery1.Fieldbyname('user_').asstring; stringgrid1.Cells[2,i] := floattostr(SQLquery1.Fieldbyname('poso').asfloat); SQLquery1.Next; i:=i+1; end; |
AW: select anweisung
Es hat leider nicht funktioniert. Ich bekomme immer wieder das gleiche Fehler: ‘Field poso not found’
Ich kann nur das erste Field rausnehme und bei der 2. Bekomme ich die Fehler Meldung. Also wenn das Code so ist: sqlquery1.sql.Clear; SQLquery1.SQL.Text := 'Select sum(his.poso) as poso, his.user user_ from history his group by his.user'; sqlquery1.open; SQLquery1.First; while not SQLquery1.EOf do begin stringgrid1.Cells[2,i] := floattostr(SQLquery1.Fieldbyname('poso').asfloat); stringgrid1.Cells[3,i] := SQLquery1.Fieldbyname('user_').asstring; SQLquery1.Next; i:=i+1; end; Dann bekomme folgende Fehler : ‘Field user_ not found‘ Ich danke Ihnen Stathis |
AW: select anweisung
Hallo,
nutzt Du MySQL 5.x und dbxopenmysql5? Wenn ja, hast Du auch ein
Delphi-Quellcode:
in Deinem Quellcode?
uses
dbxopenmysql50; Gruß |
AW: select anweisung
Also ich würde einem Ausdruck (sum(poso)) nicht den gleichen Namen geben wie einem existierenden Feld.
Daher:
SQL-Code:
SELECT SUM(poso) AS Sumposo FROM ....
Ausserdem würde ich das Feld User umbenennen, weil du mit diesen reservierten Namen immer wieder Schwierigkeiten bekommst. Kleines Beispiel:
Delphi-Quellcode:
Ein guter Delpih-Programmierer würde es vermeiden eine Variable "published" zu nennen.
function Test:Integer;
var // es ist zwar erlaubt eine Variable "published" zu nennen, aber dennoch eine schlechte Idee // weil dieser Bezeichner in Delphi schon für einen anderen Zweck reserviert ist published : Integer; begin Genauso würde ein guter Datenbankdesigner es vermeiden ein Feld "user" zu nennen. |
AW: select anweisung
Zitat:
[Fatal Error] Unit2.pas(8): File not found: 'dbxopenmysql50.dcu' (in instalation verzeichnis habe ich nur dbxopenmysql50.dll und nicht dbxopenmysql50.dcu) |
AW: select anweisung
Hallo,
Du müsstest in einem Verzeichnis folgende Dateien haben: dbxopenmysql50.pas, dbxMysql50.pas, PlainMysql50 und SqlxApi.pas. Ergänze Deine Suchpfade für Units um den entsprechenden Pfad. Aus der install.txt Zitat:
|
AW: select anweisung
versuchs mal so:
Code:
ADOQuery1.SQL.Text := 'SELECT user, sum(poso) as sum FROM history group by user';
ADOQuery1.Active := TRUE; iCount := 1; while (ADOQuery1.Eof = FALSE) do begin stringgrid1.Cells[3, iCount] := ADOQuery1.Fieldbyname('user').asstring; stringgrid1.Cells[2, iCount] := floattostr(ADOQuery1.Fieldbyname('sum').asfloat); ADOQuery1.Next; inc (iCount); end; |
AW: select anweisung
Zitat:
|
AW: select anweisung
Hallo,
Zitat:
Gruß |
AW: select anweisung
Zitat:
"User" ist ein reserviertes Wort -> sollte nicht als Feldname verwendet werden, einfach ändern sum(poso) as sum -> das geht auch nicht; sum ist eine SQL-Funktion, die man ebenfalls nicht als Feld- oder Aliasname verwenden sollte. Selbst wenn die Datenbank die Abfrage akzeptieren sollte. Leute geht auf Nummer Sicher; keine reservierten Bezeichner verwenden!!! Hier noch ein kleines Negativbeispiel:
SQL-Code:
SELECT "by.select" AS as, SUM("by.from") AS max FROM "group" by GROUP BY "by.select"
|
AW: select anweisung
Zitat:
Ist es Kommisc Ist es Komisch oder_ Select user from …. Geht Select Poso from … geht Select user,poso from …. Field user ok - Field 'poso' not found Select poso, user … field poso ok - field 'user' not found Also immer das 2. field Ich habe auch alle andere probiert statt user -> user_, abcuser ... Kann sein das ich irgendwo in der Installation Fehler gemacht habe? Seit 2 Monate Kämpfe ich mit dieses Fehler. Ich danke Sehr Stathis |
AW: select anweisung
Zitat:
koennen sie ein gutes Tutorial mit ADO und Mysql? |
AW: select anweisung
Hatte vor kurzem ein ähnliches Problem mit einem Feld das Start hieß. Datenbank war Oracle. Geklappt hat es dann mit:
SQL-Code:
Vielleicht bietet deine DB eine Vergleichbare Möglichkeit? In Access z.B. würde man dann [Start] nehmen.
'Select "Start" as Anfang From Tabellenname'
|
AW: select anweisung
Hallo,
wenn ich alles richtig verstanden habe, dann nutzt Du MySQL Version 5.1 oder höher und die dbxopenmysql Units. Zwischen MySQL 5.0 und 5.1 (bei späteren Versionen weiß ich es nicht) gibt es eine kleine Änderung in den Datentypen. Schau Dir mal die Definition von MYSQL_FIELD und MYSQL_RES in der Unit PlainMysql50 an. Stimmen diese mit der Dokumentation Deiner MySQL Version überein? Ich habe für MySQL 5.1 folgende Anpassungen gemacht:
Delphi-Quellcode:
Anschließend das Projekt neu erzeugt (Umsch+F9). Seither funktioniert es mit 5.1 (höhere Versionen habe ich noch nicht getestet).
MYSQL_FIELD = packed record
name: PChar; org_name: PChar; table: PChar; org_table: PChar; db: PChar; catalog: PChar; def: PChar; length: LongInt; max_length: LongInt; name_length: Cardinal; org_name_length: Cardinal; table_length: Cardinal; org_table_length: Cardinal; db_length: Cardinal; catalog_length: Cardinal; def_length: Cardinal; flags: Cardinal; decimals: Cardinal; charsetnr: Cardinal; _type: Cardinal; extention: Pointer; // <-- Gab es in Version 5.0 noch nicht end; MYSQL_RES = packed record row_count: Int64; fields: PMYSQL_FIELD; data: PMYSQL_DATA; data_cursor: PMYSQL_ROWS; lengths: PLongInt; handle: PMYSQL; field_alloc: MEM_ROOT; field_count: Integer; current_field: Integer; row: PMYSQL_ROW; current_row: PMYSQL_ROW; eof: Byte; unbuffered_fetch_cancelled: Byte; methods: PMYSQL_METHODS; extention: Pointer; // <-- Gab es in Version 5.0 noch nicht end; Gruß |
AW: select anweisung
Zitat:
|
AW: select anweisung
Hallo,
gerne :-D Gruß |
AW: select anweisung
hallo wieder,
die firma, wo ich meine homepage habe, hat eine update zu mysql 5.5. gemacht, und mein programm funktioniert nicht mehr. Koennst du vieleicht was fuer aenderungen machen muss? ich danke dir Stathis |
AW: select anweisung
Mit Sicherheit wäre es äußerst hilfreich, statt "programm funktioniert nicht mehr" zu beschreiben, welche Fehler auftreten, am besten mit aussagekräftigem Fehlertext.
Des weiteren könntest du dir die Änderungen, die von der vorherigen zur jetzigen Version gemacht wurden, direkt auf der MySQL-Homepage anschauen. In English: It would be helpful du tell the whole error message instead of saying "program is not working any more". Further you could try to find out changes from previous version to current version by visiting MySQL Homepage. |
AW: select anweisung
ich bekomme den Fehler "invalid username und password".
das war ganz ploezlich nach update auf mysql 5.5 Username und Pass sind richtig ich danke Stathis |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 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 by Thomas Breitkreuz