![]() |
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 |
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')]);
|
Re: DBGrid/ADODataSet sortieren. WIE?
Probiers mal so:
SQL-Code:
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.
select * from Messdaten ORDER BY [Temperatur in °C]
|
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?? |
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:
Das schlägt aber fehl, wenn die Umwandlung nicht funktioniert, und ist ausserdem wesentlich langsamer... Also besser die DB Strukur anpassen. (Vorsicht auf Datenverlust)
select spalte1, spalte2..., cast([Temperatur in °C] as float) as [Temperatur in °C] from Messdaten ORDER BY cast([Temperatur in °C] as float)
|
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??
|
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 |
Re: DBGrid/ADODataSet sortieren. WIE?
Zitat:
|
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?? |
Re: DBGrid/ADODataSet sortieren. WIE?
Zitat:
|
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 |
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?? |
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. |
Re: DBGrid/ADODataSet sortieren. WIE?
Zitat:
|
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.
|
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. |
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
|
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: |
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?
|
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 |
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:
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.
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;
Delphi-Quellcode:
Und dann über die Connection zur DB Grid angezeigt. Mach ich das soweit richtig, oder?
ADOTable1.append;
ADOTable1.edit; …. ADOTable1.Fields[6].asFloat := Temperatur; // Realzahl …. 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. |
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:
kannst du auch mittels
Fields[6]
Delphi-Quellcode:
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.
FieldByName('Temperatur in °C')
|
Re: DBGrid/ADODataSet sortieren. WIE?
Liste der Anhänge anzeigen (Anzahl: 1)
hier, bitte.
Deinen Vorschlag werd ich gleich mal umsetzen, danke. |
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:
|
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 22:50 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