![]() |
Inhalt eine Datenbank nach Datum sortieren... .
Morgen,
Ein DBGrid auf nem Form muss sich ordnen. D.h. die Einträge müssen sich nach dem Datum richten. Das Datum steht in der ersten Spalte 'Datum'. Das Datum wird immer in der Form TT.MM.JJJJ eingetragen, geht über nen DateTimePicker, ist also genormt - so das keine unterschiedlichen Formate eingetagen werden. Jetzt ist es wichtig, dass in der Datenbank die Datensätze mit dem "ältestem" Datum am Anfang stehen. Leider ist das Datum in keiner Weise von dem Datum der Einstellung des jeweiligen Datensatzes abhängig, daher hilft mir die normale Sortierung nicht. Es muss nach dem vom User angegebenem Datum sortiert werden. Es handelt sich um eine DBase Datenbank, vermutlich komm ich um eine SQL Anweisung nicht herum - allerdings fehlen mir da die Erfahrungen. Ideen? |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Ich würde sagen versuch's mal mit:
SQL-Code:
SELECT *
FROM [deine Tabelle] ORDER BY [DatumsFeld] |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Zitat:
ich habs jetzt mal so versucht:
Delphi-Quellcode:
Das Programm wird auch ganz normal kompiliert, aber wenn ich dann auf den Button klick, der die Funktion ausführen soll, dann bricht das Programm mit ner Fehlermeldung ab.
Query1.Close;
Query1.SQL.Clear; Query1.SQL.Add('select * from "t:eDienstreisebuch\main.dbf" ORDER BY "DATUM"'); Query1.Active:=True; Im Projekt soundso.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Ungültiges Schlüsselwort Symbol-String: "DATUM" Zeilennummer: 1'. Prozeß wurde angehalten. Mit Einzelne ... |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Du kannst als Tabellenname nicht die physische Datei (XXX.dbf) angeben.
Schau dir mal dir OH zu ADO an. Wenn du bereits Daten im Grid hast, dann steht die Connection zur DB anscheinend. Du solltest als Tabellenname den Namen der Tabelle in der DB benutzen. (Die hast du wahrscheinlich auch schon der Datasource des Grids gegeben) z.B.:
SQL-Code:
Auf jeden Fall noch etwas in der OH stöbern. :cyclops:
SELECT *
FROM DienstReiseBuch ORDER BY Datum |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Zitat:
die Verbindung zur Datenbank besteht. Das Programm ist eigentlich auch schon fertig, dass sind nur noch Änderungen auf Wunsch der User hin. Auch im Datasource des Grids wird auf den Datasource der Tabelle hingewiesen. Aber wenn ich jetzt einfach den Namen, an Stelle von dem ganzem Pfad, in den Code einbinde, dann läßt es sich nicht mal kompilieren. Ich hab auch schon so eine SQL Anweisung zum löschen der Datenbank auf dem Form, da musste ich auch den ganzen Pfad angeben:
Delphi-Quellcode:
Das Teil geht. Komisch ... .
procedure TForm1.BitBtn5Click(Sender: TObject);
begin if MessageDlg('Den kompletten Inhalt der Datenbank löschen?', mtWarning, [mbYes, mbNo], 0) = mrYes then begin Query1.Close; Query1.SQL.Clear; Query1.SQL.add('DELETE FROM "t:eDienstreisebuch\mainDB.dbf"'); Query1.ExecSQL; mainDBtabelle.refresh; end; end; Edit: Übrigens nutze ich keine ADO Komponenten, sondern nur DB Komponenten. Ist das dafür relevant? |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Da du ihm die Daten als String übergibst wird in jedem Fall kompilieren - selbst wenn du 'Hallo' reinschreibst.
Ich habe noch nie etwas wie "t:eDienstreisebuch\mainDB.dbf" als Tabelle in einem SQL-Statement gesehen. :wiejetzt: Mag in DBase aber vieleicht durchgehen - keine Ahnung. :gruebel: Versuch's mal ohne " vor und nach DATUM - vielleicht funzt es ja dann. |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Wenn ich es so schreibe:
Delphi-Quellcode:
Dann gibts auch keine Fehlermeldung mehr, wenn ich auf den Button Click, aber leider tritt der Erfolg nicht ein.
Query1.Close;
Query1.SQL.Clear; Query1.SQL.Add('select * from "t:eDienstreisebuch\mainDB.dbf" ORDER BY DATUM'); Query1.Active:=True; D.h. die Daten werden leider nicht geordnet. |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Sorry hier verlässt es mich :angle:
Ich benutze weder ADO, BDE, ODBC... Das Package, dass ich nutze enkapselt direkt die API meiner DB (Oracle), deshalb kann ich dir bei bestem Willen nicht mit solchen BDE-Basteleien helfen. Außerdem habe ich auch noch einen Job... Waidmanns heil :zwinker: |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Danke für deine Hilfe,
auf Oracle muss hier nächstes Jahr auch alles umgestellt werden, ich freu mich nicht gerade drauf. Nochmals, mein Dank für deine Zeit. Vielleicht findet sich wer, der mehr davon versteht als wir beide :? . |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Du wirst deine Meinung schon noch ändern.
Spätestens wenn du dann mal über diese Website gestolpert bist: ![]() Ich benutze alle 3 Produkte und DOA ist so ziemlich die genialste Art von Delphi auf eine DB zu kommen. :lol: |
Re: Inhalt eine Datenbank nach Datum sortieren... .
hi,
ist zwar etwas offTopic: < :dp: >, sorry <<DOA ist so ziemlich die genialste Art von Delphi auf eine DB zu kommen. >> schon die neue oder noch 3.4 ?? habe den umstieg noch nicht gewagt... :-) thomas |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Hallo LuckyStrike4life,
Zitat:
Zitat:
|
Re: Inhalt eine Datenbank nach Datum sortieren... .
Zitat:
Leider gibt es zwei Standorte des Unternehmens, im zweiten heißt das Serverlaufwerk 'g:', also muss ich dafür jeden Verweis wieder umschreiben. Wenn ich aber nur 'mainDB' als Angabe der Datenbank schreibe, gibts nur Fehlermeldungen das die Datenbank(en) unter dem Ordner in dem das Programm liegt, nicht gefunden werden konnte. Die Verknüpfung der relevanten Komponenten: Es gibt eine TTable Komponente, die verweißt auf die MainDB.DBF Datenbank. Ein TDataSource verweißt mit der Eigenschaft 'DataSet' auf die TTable. Der Query ist auf den Datasource der TTable ausgerichtet. Der TDBGrid greift auch auf den benannten TDataSource zu. Ich hoffe es ist verständlich, wenn nicht - dann einfach fragen. |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Hallo LuckyStrike4life,
Zitat:
Benutze doch für die Verbindung zur Datenbank eine TDatabase und richte rechnerspezifisch BDE-Aliase ein. das kann schon bei der Installation automatisch gemacht werden. Dann kannst Du die TTable rausschmeißen und dafür die TQuery nutzen Wenn Du Deine Struktur jedoch beibehalten willst, dann mußt Du hinter Deine Query noch eine Datasource legen un an diese das DBGrid anbinden. |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Thx r-kerber,
leider würde es nicht so gut sein, wenn ich die ganze Struktur verändere, denn das Programm läuft schon auf knapp 90 Rechnern. Es sind nur noch die Änderungen wegen den Wünschen der User. Nun hab ich mal das versucht, was du mir empfohlen hast. Ich hab n neuen Query angelegt (querysort), dann ein Datasource (sortDatasource) und den Grid des Forms auf den Sortdatasource gelegt. Der Query steht in der Eigenschaft DataSource: nun auf sortDatasource. In der Eigenschaft DatabaseName: hab ich nichts eingetragen. Den Code hab ich natürlich auch umgeschrieben:
Delphi-Quellcode:
Leider fehlt da wohl noch etwas... . Es wird, sobald ich auf den Button klicke der die Funktion beinhaltet, weiterhin nichts im Grid angezeigt... .
Querysort.Close;
Querysort.SQL.Clear; Querysort.SQL.Add('select DATUM from "t:eDienstreisebuch\mainDB.dbf" ORDER BY DATUM'); Querysort.Active:=True; |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Die SortDatasource muß auf Query, während query weiterhin auf die erste datasource geht!
|
Re: Inhalt eine Datenbank nach Datum sortieren... .
Zitat:
jetzt sortiert er und gibt es im Grid aus! Juhuu! Nur leider schaut Delphi nur nach den ersten zwei Zahlen, sprich TT.MM.JJJJ und nur nach TT wird sortiert, was nicht so gut ist, denn so ist die Sortierung noch nicht richtig. Aber ich bin jetzt schon ein risiges Stück weiter, nochmals DANKE!! Wer noch Ideen hat, wie ich das Datum als ganzes ansehen lassen kann und danach sortiert wird, der solls nur sagen. |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Welchen Typ hat das feld in dem das Datum steht?
|
Re: Inhalt eine Datenbank nach Datum sortieren... .
Zitat:
|
Re: Inhalt eine Datenbank nach Datum sortieren... .
Dann ist natürlich klar, warum nur nach der Tageszahl sortiert wird. Es wird ganz "normal" alphanumerisch sortiert. Besser wäre eine Datumsformat für diese Spalte. Aber versuche es mal so:
SQL-Code:
Vielleicht funktioniert's.
select *, CAST(DATUM AS Date) AS SortDate
FROM "t:eDienstreisebuch\main.dbf" ORDER BY SortDate |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Danke,
die Lösung war dann doch leichter. Ich hab die DB bearbeitet und dann mal das Datum Feld auf DATUM gesetzt. Jetzt sortiert er richtig! Gott sei DANK! So wie euch allen auch, sehr netter Support hier. |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Morgen,
eigentlich war dieser Thread fertig. Allerdings wollte ich ihn dann doch noch mal nutzen, denn nun muss ich nicht nur die Tabelle geordnet ausgeben (im Grid), sondern die Tabelle muss auch tatsächlich neu sortiert werden. Fragt nicht, ich habs mir nicht ausgedacht :? . Der funktionierende Code, um die Tabelle geordnet auszugeben im Grid, sieht so aus:
Delphi-Quellcode:
Es müsste mit SQL doch auch möglich sein, diese dBase Datenbank richtig zu sortieren. ´Zumindest hätte ich n großes Problem wenns nicht geht.
Querysort.Close;
Querysort.SQL.Clear; Querysort.SQL.Add('select * from "t:eDienstreisebuch\mainDB.dbf" ORDER BY DATUM'); Querysort.Active:=True; |
Re: Inhalt eine Datenbank nach Datum sortieren... .
In der Tabelle stehen die einzelnen Datensätze so drin, wie sie eingetragen werden. Wozu soll das Sortieren der Tabelle gut sein? Und bei "echten" SQL-Datenbanken ist es noch unübersichtlicher, da hier der Platz von gelöschten Datensätzen wieder neu genutzt genutzt wird. Die einzige Chance, die Du IMHO hast ist das Anlegen einer neuen Tabelle, Löschen/Umbenennen der alten und anschließendes Umbenennen der neuen Tabelle.
|
Re: Inhalt eine Datenbank nach Datum sortieren... .
Hi,
Zitat:
aber wer um Himmels willen will das und warum???? Und warum hast Du dann ein Problem, wo doch diese Forderung sinnlos ist, und SQL-Datenbanken deshalb so nicht gebaut sind, seit jeher. Also mal kurze Erläuterung: SQL - Datenbanken arbeiten per Definition mengenorientiert, die Elemente dieser Menge, die in Tabellen aufbewahrt werden, haben keine Sortierung. Etwas was keine Sortierung hat, kann man auch nicht sortieren, mal etwas locker formuliert. Eine Sortierung entsteht erst durch die Abfrage (order by). Keine SQL-Datenbank garantiert irgendeine Sortierung wenn man bei der Abfrage keine vorgibt. Desktopdatenbanken sind jetzt rein zufällig häufig so implementiert, daß die Datensätze eine Reihenfolge haben, aber das ist keine Fähigkeit von SQL, und kann daher auch nicht über SQL genutzt werden. Überhaupt sollte man Dinge, die nur rein zufällig funktionieren, nicht verwenden, weil bei der nächsten Datenbank, ja vielleicht sogar der nächsten Version einer Datenbank gehen sie plötzlich nicht mehr. Grüsse Woki |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Warum:
Wenn mir wer von 'oben' sagt: 'Lauf!' Dann frag ich nicht erst wie schnell, sondern laufe. Leider kann man sich heute seinen Arbeitsplatz nicht einfach auswählen, etwas unterordnen ist da angesagt. Aber wenn es einfach nicht geht, dann gehts nicht. Danke für die Information. |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Zitat:
Zitat:
Grüsse Woki |
Re: Inhalt eine Datenbank nach Datum sortieren... .
LuckyStrike4life, nicht gleich aufgeben! :zwinker:
Jeden Schritt als einzelnes Statement absetzen.
SQL-Code:
Ist ein bisschen umständlich, sollte aber auch in dBase funktionieren.
--1)
CREATE TABLE mainDB.eDienstReiseBuch_New AS SELECT * FROM mainDB.eDienstreisebuch ORDER BY DATUM; --2) DELETE FROM mainDB.eDienstReiseBuch; --3) INSERT INTO mainDB.eDienstReiseBuch SELECT * FROM mainDB.eDienstReiseBuch_New; --4) DROP TABLE mainDB.eDienstReiseBuch_New; --5) COMMIT; An deinen Arbeitsplatzrechner dürfte mainDB ja richtig definiert sein, also musst du diese f*** "t:eDienstreisebuch\mainDB.dbf"-Schreibweise auch nicht nutzen. |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Zitat:
|
Re: Inhalt eine Datenbank nach Datum sortieren... .
Okay,
ich hab jetzt noch mal mit meinem direktem Chef gesprochen, er meint es würde schon okay sein - wenn die Datenbank unsortiert bleibt. Allerdings unterstehe ich diversen Leuten, sprich dem Chef meines Chefs usw... . Kommt noch drauf an was die dazu meinen. Vielleicht fällt es euch auf das mein Delphi-Wissen nicht das Beste ist, an sich bin ich auch Systemintegration nicht Anwendungsentwicklung, aber man nimmt was kommt. So qual ich mich seit einiger Zeit mit Delphi. Nun gut, ich hab eben auch den Vorschlag von GeorgeWNewbie meinem Chef erklärt, aber er meint dieser wäre zu unsicher. Zwecks Systemausfall, Serverausfall während der Ausführung des Codes. Aber dennoch schönen Dank für die Mühe. Relevant wäre die Sortierung der Datenbank im Zusammenhang mit der Druckfunktion gewesen. Denn diese ließt die Datenbank 'einfach nur' aus, und druckt den Inhalt in der Reihnfolge wie die Daten in der DB stehen. Edit: Dabei fällt mir ein, man könnte ja eventuell ein Query mit nem DataSource verwenden, und die QRDB Komponenten damit verknüpfen. |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Jede moderne SQL-DB verwendet sog. "Transaktionsmodelle".
d.h.: solange du den letzten Befehl in meinem Post ("Commit") nicht ausgeführt hast, bleiben die Daten auf dem Server unangetastet. Erst dadurch schreibst du die Daten von den rollback-segmenten in die tatsächlichen tablespaces. (ich kann hier aber für dBase meine Hand nicht ins Feuer legen) Um auf Nummer sicher zu gehen - welche Compos zum DB-Zugriff verwendest du & weiß jemand hier in der DP ob diese Compos autom. ein Commit absetzen. p.s.: Das ist nur um dir eine Lösung für deine Frage zu zeigen, ich persönlich bin gegen eine Umsortierung der Tabellen, da man sowieso mit Abfragen darauf zugreift. |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Zitat:
|
Re: Inhalt eine Datenbank nach Datum sortieren... .
Zitat:
|
Re: Inhalt eine Datenbank nach Datum sortieren... .
@GeorgeWNewbie
Es sind normale DB Componenten, diese versuchen sofort den Datensatz einzutragen. Diese Funktion hab ich aber im OI rausgenommen. Also ist deine Lösung eine wirkliche Alternative. Wenn ich das mit der Durckfunktion nicht über SQL lösen kann, werd ich auf deine Lösung zurück greifen. |
Re: Inhalt eine Datenbank nach Datum sortieren... .
Hi,
der einzig sinnvolle Weg ist aber wirklich die Daten bei der Druckaufbereitung zu sortieren, das geht mit Tables undmit Queries gleichermaßen, alles andere hiesse zu versuchen einen Designfehler mit einem anderen Designfehler zu reparieren, und auf eine Lösung zu setzen, die jederzeit (z.D. mit jedem Versionswechsel, aber nicht nur) aufhören kann zu funktonieren. Was das Transaktionsverhalten angeht, meine ich IMHO das die BDE das auch für Desktopdatenbanken nachbildet, woraus ich folgenden Schluss ziehe: Alle DBkomponenten machen defaultmäßig nach jedem post ein Autocommit, die Transaktionskontrolle kann aber vom entwickler übernommen werden, bei Paradox übernimmt das die BDE und bei Access wird das von ADO übernommen, ich bin sicher das ich das auch für diese beiden Desktopdatenbanken schon getestet und verwendet hab. Grüsse Woki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:26 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