Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid/ADODataSet sortieren. WIE? (https://www.delphipraxis.net/117506-dbgrid-adodataset-sortieren-wie.html)

Dark Angel 19. Jul 2008 11:15

Datenbank: Access • Version: 2003 • Zugriff über: ADOX

DBGrid/ADODataSet sortieren. WIE?
 
Hallo,
ich habe schon in mehreren Threads gelesen dass es nur möglich ist ein DBGrid zu sortieren indem man die ADODataSet sortiert. Nun darin liegt mein Probelem ich will nur eine bestimmte Spalte sortieren, also kein Button, und sie soll von klein nach groß sortiert werden (zB. 1, 5, 20, 100, 200,...). Die Spalte heist: "Temperatur in °C" und wenn ich in "ADODataSet1-->COmmandText-->"select * from Messdaten ORDER BY Temperatur in °C"" dann ist es mir gar nicht möglich die Dataset zu aktivieren, da dann dieser Fehler angezeigt wird:
"In-Operation ohne Klammern: () in Abfrageausdruck 'Temperatur in °C'"

Wenn ich aber eine andere Spalte eintrage (zB. "Ort") dann kalppt es mit dieser Spalte hervorragend.

Allerdings wird diese Spalte 'Ort' dann nicht sortiert, es ändert sich gar nichts.

Hinweis: Spalte 'Temperatur in °C' ist als "WideString" deklariert, aber es befinden sich natürlich nur Zahlen darin. Das ganze wird über ein Editfeld eingegeben. Es können Zahlen von -20 bis +50 vorkommen und ich will dass diese richtig sortiert werden von klein nach groß.

Ich hoffe Ihr könnt mir helfen. DANKE

DeddyH 19. Jul 2008 11:19

Re: DBGrid/ADODataSet sortieren. WIE?
 
Die Spalte heißt 'Temperatur in °C'? Etwas unglücklich gewählter Bezeichner in meinen Augen. Du könntest es mal so versuchen:
Delphi-Quellcode:
Query.SQL.Text := Format('SELECT * FROM Messdaten ORDER BY %s',[QuotedStr('Temperatur in °C')]);

Jelly 19. Jul 2008 11:20

Re: DBGrid/ADODataSet sortieren. WIE?
 
Probiers mal so:
SQL-Code:
select * from Messdaten ORDER BY [Temperatur in °C]
wenn mich nicht alles täuscht dürfte das die Syntax unter Access sein. Der Grund ist, weil du einen recht unkonventiellen Spaltennamen gewählt hast, stellt aber pribzipiell kein Problem dar.

Dark Angel 19. Jul 2008 11:59

Re: DBGrid/ADODataSet sortieren. WIE?
 
wow das ging aber schnell und es funzt , sehr schön.

Jetzt hab ich allerdings ein weiteres Problem. die zahl muss ja in float sein damit das sortiren funktioniert und ich hab die Eingangs variable bereits in realforamt und bei DataSet hab ich auch unter datatyp ftfloat eingetragen. er zeigt mir allerdings immer noch beim start des programms die fehlermelgung "..unterschiedliche typen für feld 'temperatur in °C'.."

was hab ich übersehen??

Jelly 19. Jul 2008 12:03

Re: DBGrid/ADODataSet sortieren. WIE?
 
Was für ein Type hat denn dein Temperaturfeld in der DB. Vielleicht solltest du da mal sowas wie Decimal oder Float wählen. Sag mir bitte nicht, dass du es in einem Varchar Feld stehen hast.

Kannst du nicht die Struktur ändern, muss du im Select casten:
SQL-Code:
select spalte1, spalte2..., cast([Temperatur in °C] as float) as [Temperatur in °C] from Messdaten ORDER BY cast([Temperatur in °C] as float)
Das schlägt aber fehl, wenn die Umwandlung nicht funktioniert, und ist ausserdem wesentlich langsamer... Also besser die DB Strukur anpassen. (Vorsicht auf Datenverlust)

Dark Angel 19. Jul 2008 13:43

Re: DBGrid/ADODataSet sortieren. WIE?
 
noch ist es in einem varchar, weil ich ja nicht weiß wie ich es ändern soll. Geht das denn nachträglich überhaupt??

Dark Angel 19. Jul 2008 13:53

Re: DBGrid/ADODataSet sortieren. WIE?
 
ICH HABE ES GESCHAFFT.

LÖSUNG: ICH HAB EINFACH NOCHEINMAL ALLES EINGEBUNDEN UND ZUVOR WIE ZUVOR BEREITS GESAGT BEI DATATYP AUF 'ftFloat' UMGESELLT.


Vielen herzlichen Dank an alle

Jelly 19. Jul 2008 14:00

Re: DBGrid/ADODataSet sortieren. WIE?
 
Zitat:

Zitat von Dark Angel
LÖSUNG: ICH HAB EINFACH NOCHEINMAL ALLES EINGEBUNDEN UND ZUVOR WIE ZUVOR BEREITS GESAGT BEI DATATYP AUF 'ftFloat' UMGESELLT.

Das ist dennoch keine saubere Lösung. Die Daten sollen bereits in der DB sauber vorhanden sein, und nicht erst beim Client am Schluss versucht werden, konvertiert zu werden.

Dark Angel 19. Jul 2008 14:09

Re: DBGrid/ADODataSet sortieren. WIE?
 
nene ich wandle das editfeld direkt beim schreiben in die variable mit strtofloat um und dann wird das in die DB geschrieben.

Aber jetzt hab ich gemerkt dass die Vorzeichen der Zahl nicht vorne sondern hinter der Zahl stehen das sieht echt blöd aus kann ich das irgendwie ändern??

alzaimar 19. Jul 2008 15:33

Re: DBGrid/ADODataSet sortieren. WIE?
 
Zitat:

Zitat von Dark Angel
Aber jetzt hab ich gemerkt dass die Vorzeichen der Zahl nicht vorne sondern hinter der Zahl stehen das sieht echt blöd aus kann ich das irgendwie ändern??

WO steht das? Dem Float ist es nämlich egal, wie er/sie dargestellt wird, eine Zahl ist eine Zahl. Normalerweise kann man das in der 'DisplayFormat'-Eigenschaft des persistenten Datenfeldes einstellen.

Dark Angel 19. Jul 2008 16:04

Re: DBGrid/ADODataSet sortieren. WIE?
 
Das zeigt meine DBGrid an und zwar bei "Temperatur in °C" also im FOrmat Float. Sehr komisch das ganze.

Und jetzt ist auch noch meine Leiste zum Verschieben der ANzeige im DBGrid die noirmalerweise Rechts an der Seite ist, auf die Linke Seite gerutscht und ich hab keine Ahnung wie das passieren konnte. hast du dafür auch ne lösung??


EDIT: laut Hilfe kann man das vorzeichen nicht an der Lage verändern, zumindest steht da nichts davon drin

Dark Angel 21. Jul 2008 07:14

Re: DBGrid/ADODataSet sortieren. WIE?
 
Mst da noch was aufegallen. Ich habe jetzt zwar "SELECT * Messdaten ORDER BY [Temperatur in °C]" eingestellt aber es sieht so aus als würde der versuchen 2 Spalten gleichzeigtig zu sortieren. Einmal die "ID" (der feste Wert in der ersten Spalte) und dann noch das was ich eingestellt habe (Temperatur in °C).

Kann das sein?? kann ich die automatische Sortierung von "ID" irgendwie abstellen??

Jelly 21. Jul 2008 07:42

Re: DBGrid/ADODataSet sortieren. WIE?
 
Dieses Select-Statement sortiert definitiv lediglich nach einer Spalte.

So langsam wird es Zeit, uns mal deine Tabellenstruktur zu zeigen. Ich habe das Gefühl, du tust dich in irgendeiner Art komplizierter als es eigentlich ist.

HeinzJ 21. Jul 2008 08:05

Re: DBGrid/ADODataSet sortieren. WIE?
 
Zitat:

ich habe schon in mehreren Threads gelesen dass es nur möglich ist ein DBGrid zu sortieren indem man die ADODataSet sortiert. Nun darin liegt mein Probelem ich will nur eine bestimmte Spalte sortieren, also kein Button,
Du musst nicht unbedingt einen Button benutzen um die Sortierung innerhalb des ADODataSet durchzuführen. Du kannst die entsprechenden Routinen auch z.B. in dem AfterOpen Ereigniss unterbringen.

Dark Angel 21. Jul 2008 21:21

Re: DBGrid/ADODataSet sortieren. WIE?
 
Liste der Anhänge anzeigen (Anzahl: 1)
So ich hab jetzte mal meine einstellungen in ein bild gepackt, vll könnt ihr mir den fehler dadurch sagen.

Jelly 22. Jul 2008 08:43

Re: DBGrid/ADODataSet sortieren. WIE?
 
Ja, und was klappt laut deinem Anhang nun nicht. Die Temperaturspalte ist doch korrekt sortiert, und auch das Komma steht wo es soll.

Mich interessiert auch die DB Struktur selbst in erster Linie.

Dark Angel 22. Jul 2008 14:30

Re: DBGrid/ADODataSet sortieren. WIE?
 
die Sortierung funzt ned wie du doch sehen kannst. Wenn du dir die spalte mal ansiehst. erst 14,6°C, dann -5°C... sollte eigentlich von -..;..°C bis +..;..°C sortiert werden

Jelly 23. Jul 2008 06:59

Re: DBGrid/ADODataSet sortieren. WIE?
 
:roteyes: :spin2: Also keine Ahnung, wo ich da gekuckt habt... Hast natürlich Recht.

Dann zeig doch aber bitte endlich mal deine Datenstruktur der Tabelle. Meine Hellsehfähigkeiten sind momentan etwas eingeschränkt der der jetzigen Mondphase :glaskugel:

Dark Angel 23. Jul 2008 08:35

Re: DBGrid/ADODataSet sortieren. WIE?
 
Sorry aber ich weiß echt nicht was ich dir jetzt genau zeigen soll bzw was du sehen willst. Wie soll die Datenstruktur denn aussehen?

Jelly 23. Jul 2008 09:45

Re: DBGrid/ADODataSet sortieren. WIE?
 
Die Struktur deiner Tabelle in der Datenbank, inklusive Datentypen.
Es kann so nicht sein, dass ein Order By ein falsches Ergebnis liefert bei korrekt gewählten Datentypen

Dark Angel 23. Jul 2008 11:13

Re: DBGrid/ADODataSet sortieren. WIE?
 
Aha, gut. Ich habe bereits nach euren Anweisungen den Datentyp für die „Temperatur in °C“-Spalte von String auf Float geändert. Eingegeben wird die Temperatur per Hand in ein Editfeld

Delphi-Quellcode:
if Ed_Temp.text = ' ' then begin    // damit keine Fehlermeldung auftaucht
   Temperatur := 0;        // das ist die globale Variable für die Temperatur
   Ed_Temp.text := '0';         // ..und der Eintrag ins Editfeld
 end
 else begin
   Temperatur := strtofloat(Ed_Temp.text)   // oder eben bei einer Temperatureintragung die
// richtige Temperatur
 end;
Insgesamt habe ich 48 Werte in der Datenbank, will aber in Delphi (DBGrid) nur 12 anzeigen. Bis auf die Temperatur sind alle anderen Werte Stringwerte, da ich nur nach der Temperatur ordnen will. Diese Temperatur wird dann mit den anderen in die ADOTable1 geschrieben.

Delphi-Quellcode:
ADOTable1.append;
  ADOTable1.edit;
….
  ADOTable1.Fields[6].asFloat := Temperatur;                      // Realzahl
….
Und dann über die Connection zur DB Grid angezeigt. Mach ich das soweit richtig, oder?

Zusätzlich will ich dass der Benutzer die Daten ändern kann, die in der Datenbank stehen. Das mache ich so:
procedure TForm6.DBGrid1ColExit(Sender: TObject);
begin

Delphi-Quellcode:
if ADOConnection1.Connected then
  if ADOTable1.active then
  if gridchange=false then begin
  ADOTable1.edit;
….
  ADOTable1.Fields[6].asFloat := strtofloat(ADOTable1.Fields[6].text);
….


  ADOTable1.Post;
  end;

end;


Wenn du noch andere Sachen wissen willst, muss t du mir das bitte genauer erklären was du willst.

Jelly 24. Jul 2008 10:37

Re: DBGrid/ADODataSet sortieren. WIE?
 
Ich will doch nur die Tabellenstruktur sehen. Von mir aus öffne deine Tabelle in Access im Design Modus und mach ein Screenshot.

N.B.:
statt über
Delphi-Quellcode:
Fields[6]
kannst du auch mittels
Delphi-Quellcode:
FieldByName('Temperatur in °C')
auf die entsprechende Spalte zugreifen. Das erhöht die Übersicht, und ist nicht so fehleranfällig, falls sich mal eine neue Spalte dazwischenmogelt, denn dann müsstest du den Index von 6 auf 7 anpassen.

Dark Angel 24. Jul 2008 12:08

Re: DBGrid/ADODataSet sortieren. WIE?
 
Liste der Anhänge anzeigen (Anzahl: 1)
hier, bitte.

Deinen Vorschlag werd ich gleich mal umsetzen, danke.

Jelly 24. Jul 2008 12:54

Re: DBGrid/ADODataSet sortieren. WIE?
 
Ich hab mir jetzt, nach Überprüfung der DB Struktur, nochmals dein Screenshot aus Posting #15 angeschaut. Ein Order By liefert nämlich definitiv die richtige Reihenfolge. Aber du hast dich total vertan in der Zuweisung des Datasets an deine DataSource1. Da solltest du dann aber auch bitte schön ADODataSet1 wählen, und nicht ADOTable1 :wall:

Dark Angel 24. Jul 2008 13:45

Re: DBGrid/ADODataSet sortieren. WIE?
 
VIELEN VIELEN DANK

Ich bin ja da noch sehr unerfahren. Und ich hab da einfach immer das eingetragen was ium dropdown zur auswahl stand. und da war nur ADOTable weil ich bei ADODataSet unter DataSource schon DataSouce eingestellt habe und dann kommt der fehler "keine zirkuläe...irgenwas...".

Die ortnung klappt jetzt aber ich glaub da stimmt mehr nicht, weil ich jetzt die dtensätze die ich aktuell unter der programmlaufzeit abspeichere nicht sofort in der DBGrid zu finden sind sondern erst nach einem neustart des programms. aber ich hab die "Verdindungen" und die "Aktive" immer auf true.
Kannst du mir mal sagen was ich wie mit wem richtig verbinden muss damit alles klappt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 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