AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

select anweisung

Ein Thema von stathis · begonnen am 13. Jan 2013 · letzter Beitrag vom 24. Nov 2013
Antwort Antwort
Seite 1 von 3  1 23      
stathis

Registriert seit: 18. Jul 2005
31 Beiträge
 
#1

select anweisung

  Alt 13. Jan 2013, 21:15
Datenbank: dbexpress • Version: 5 • Zugriff über: -
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:
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;
aber bei der folgende code:
Delphi-Quellcode:
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;
kann nicht das feld 'poso' nicht finden.

wieso?

Entschuldingen sie mir fuer meine deutsche Sprache

Geändert von MrSpock (14. Jan 2013 um 15:15 Uhr) Grund: Delphi Tags eingefügt.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: select anweisung

  Alt 14. Jan 2013, 01:46
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#3

AW: select anweisung

  Alt 14. Jan 2013, 06:49
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;
  Mit Zitat antworten Zitat
stathis

Registriert seit: 18. Jul 2005
31 Beiträge
 
#4

AW: select anweisung

  Alt 14. Jan 2013, 20:51
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

Geändert von stathis (14. Jan 2013 um 21:32 Uhr)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#5

AW: select anweisung

  Alt 15. Jan 2013, 01:52
Hallo,

nutzt Du MySQL 5.x und dbxopenmysql5?

Wenn ja, hast Du auch ein
Delphi-Quellcode:
uses
  dbxopenmysql50;
in Deinem Quellcode?

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

AW: select anweisung

  Alt 15. Jan 2013, 07:06
Also ich würde einem Ausdruck (sum(poso)) nicht den gleichen Namen geben wie einem existierenden Feld.
Daher: 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:
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
Ein guter Delpih-Programmierer würde es vermeiden eine Variable "published" zu nennen.
Genauso würde ein guter Datenbankdesigner es vermeiden ein Feld "user" zu nennen.
  Mit Zitat antworten Zitat
stathis

Registriert seit: 18. Jul 2005
31 Beiträge
 
#7

AW: select anweisung

  Alt 15. Jan 2013, 13:45
Hallo,

nutzt Du MySQL 5.x und dbxopenmysql5?

Wenn ja, hast Du auch ein
Delphi-Quellcode:
uses
  dbxopenmysql50;
in Deinem Quellcode?

Gruß
neis das habe ich nicht gehabt, aber bekomme folgende fehler:
[Fatal Error] Unit2.pas(8): File not found: 'dbxopenmysql50.dcu'

(in instalation verzeichnis habe ich nur dbxopenmysql50.dll und nicht dbxopenmysql50.dcu)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#8

AW: select anweisung

  Alt 15. Jan 2013, 14:23
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:
In order to static-link this driver as a DCU, put the compiled DCUs somewhere on your Unit search Path, and add dbxopenmysql50 to your uses clause.
Gruß
Volker Zeller

Geändert von Volker Z. (15. Jan 2013 um 14:28 Uhr) Grund: Rechtschreibung
  Mit Zitat antworten Zitat
gro

Registriert seit: 9. Jul 2004
Ort: Kärnten
17 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: select anweisung

  Alt 15. Jan 2013, 14:26
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;
Peter (EDV = Ende der Vernunft)
  Mit Zitat antworten Zitat
stathis

Registriert seit: 18. Jul 2005
31 Beiträge
 
#10

AW: select anweisung

  Alt 15. Jan 2013, 18:32
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:
In order to static-link this driver as a DCU, put the compiled DCUs somewhere on your Unit search Path, and add dbxopenmysql50 to your uses clause.
Gruß
ich habe alles gemacht. Ich bekomme immer wieder das gleiche Fehler;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 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