Autor Beitrag
LuckyStrike4life
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Do 04.12.03 20:08 
Morgen,

so ein Thema besteht schon - hat sich aber totgelaufen. Bessere Überschrift ... vielleicht spricht das mehr Leute an.

Das Problem ist folgendes,
eine Datenbank (dBase) muss nach dem Datum sortiert werden.
Das Datum wird vom User eingegeben, je ein Datum gehört zu einem Datensattz.

Vermutlich läßt sich das nur über SQL Anweisungen lösen.

Ich kam z.B. auf diesen Gedanken:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select DATUM from "t:eDienstreisebuch\mainDB.dbf" ORDER BY DATUM');
Query1.Active:=True;
MainDBtabelle.refresh;
end;

end.
Delphi kompiliert das Programm, stürtzt auch beim Ausführen dieser Funktion nicht ab, aber es passiert leider gar nichts. :(

Hab ich was vergessen? Ist es so einfach nicht möglich? Gibt es andere Möglichkeiten?

_________________
... ich kann doch nichts ...
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Do 04.12.03 20:35 
Hallo,

warum legst du nicht einfach einen Index für die Tabelle an und wechselst den Index für die Tabelle?
Und ein Sortieren der Daten in der Tabelle wird dadurch nicht erreicht. Du bekommst mit dem Query eine nach Datum sortierte Menge von Datensätzen zurückgeliefert. Die Ergebnismenge hat aber gar nichts mit deiner Tabellen komponente zu tun.
Setz doch mal die Eigenschaft dataset von deiner Datasource auf das query.

Gruß
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Fr 05.12.03 11:49 
CenBells hat folgendes geschrieben:
Hallo,

warum legst du nicht einfach einen Index für die Tabelle an und wechselst den Index für die Tabelle?
Und ein Sortieren der Daten in der Tabelle wird dadurch nicht erreicht. Du bekommst mit dem Query eine nach Datum sortierte Menge von Datensätzen zurückgeliefert. Die Ergebnismenge hat aber gar nichts mit deiner Tabellen komponente zu tun.
Setz doch mal die Eigenschaft dataset von deiner Datasource auf das query.

Gruß
Ken

Morgen,
ein Index für eine dBase Datenbank, dass hab ich schon mal versucht. Ist mir aber nicht geglückt. Wenn wer weiß wie es geht, dann her mit den Informationen.

Ich hab denn jetzt mal den Datasource der Datenbank auf den Query gelegt (sprich: dataset auf Query eingestellt), dass hat leider keinen Erfolg gebracht.

_________________
... ich kann doch nichts ...
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Fr 05.12.03 12:23 
Also über nen SQL-Befehl lässt sich die DB nicht sortieren, aber les doch mit diesem SQL:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
begin 
Query1.Close; 
Query1.SQL.Clear; 
Query1.SQL.Add('select DATUM from "t:eDienstreisebuch\mainDB.dbf" ORDER BY DATUM'); 
Query1.Active:=True; 
MainDBtabelle.refresh; 
end;


die Table in eine dafür geeignete delphi compo ein und sortiere darin nach dem Datum. Danach insertest du alles wieder auf die Table. Um nen Duplicate Key zu vermeiden musst du halt vorher nen Delete auf die ganze Table machen :-) Oder du machst noch ein feld dazu welches "Sort" heißt und stellst da beim inserten ein "J" rein und deletest nach erfolgreichem Insert alle Rows die Kein "J" im Feld "Sort" haben.

So würde ich es im notfall machen.... Aber wer kommt schon auf die idee Tables zu sortieren...

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Fr 05.12.03 12:32 
Zitat:
[...]die Table in eine dafür geeignete delphi compo ein und sortiere darin nach dem Datum. Danach insertest du alles wieder auf die Table. [...]

Was wäre den eine geeignete Komponente dafür?
An sich hört sich dein Text plausibel an.

_________________
... ich kann doch nichts ...
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Fr 05.12.03 12:40 
Hm,
das nennt sich glaub ich DBGRID, damit kannst du zumindest mit dem sort SQL die daten darin einfügen. Ob man jetzt von oben nach unten abarbeiten kann um den insert durchzuführen weiß ich nicht genau, aber ich denke schon.

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 05.12.03 12:52 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
begin 
Query1.Close; 
Query1.SQL.Clear; 
Query1.SQL.Add('select DATUM from "t:eDienstreisebuch\mainDB.dbf" ORDER BY DATUM'); 
Query1.Active:=True; 
MainDBtabelle.refresh; 
end;


So ähnlich sollte es wohl schon gehen. Aber mir schmecken ein paar Sachen nicht.

1. was macht das refresh ? Könnte mir vorstellen, daß das Ergebnis damit wieder gelöscht wird.

2. Du gibst den Dateinamen in der Query explizit an. Also kann doch eigentlich Dein Database-Objekt nichts davon wissen :?:

In letzterem Fall kann also wahrscheinlich kein Ergebnis kommen.

_________________
Gruß
Hansa
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Fr 05.12.03 12:55 
Der SQL stimmt schon, er bekommt ja glaub auch ein Ergebnis, hab ich jedenfalls so verstanden. Aber die Datenbank wird ja nur gelesen, nicht verändert.... Sortiert wird nur die Ausgabe des selects, aber nicht die Datenbank selber....

Er hätte halt gerne, warum auch immer, die Datenbank sortiert...

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Fr 05.12.03 13:09 
Okay,
ich hab gerade nochmals was verändert. Ich hab einen neuen Query aufs Form gelegt, dazu ein neuen DataSource. Hab den Query auf den DataSource eingestellt und den DBGrid auf den DataSource.
Ich wollte so ausschließen, dass die Änderung (also die Sortierung) nicht angezeigt werden kann, weil der DBGrid ja auf den Datasource der Tabelle schaut.
Den Code hab ich natürlich auch auf den neuen Query umgeschrieben.
Hat aber leider so nichts gebracht, ausser das der Grid nun leer bleibt, auch wenn man auf den Button clickt, der die Funktion ausführt.
Schade.

Hansa
Zitat:
So ähnlich sollte es wohl schon gehen. Aber mir schmecken ein paar Sachen nicht.

1. was macht das refresh ? Könnte mir vorstellen, daß das Ergebnis damit wieder gelöscht wird.

2. Du gibst den Dateinamen in der Query explizit an. Also kann doch eigentlich Dein Database-Objekt nichts davon wissen

In letzterem Fall kann also wahrscheinlich kein Ergebnis kommen.

1. Hat leider nichts gebracht den Refresh auszuklammern.
2. wenn ich den Pfad nicht komplett angebe, dann findet er die Datenbank nicht, die liegt auf nem Server - eine andere Lösung als den ganzen Pfad anzugeben wäre mir auch lieber, scheint aber nicht zu funktionieren

@ANDI
Zitat:
Hm,
das nennt sich glaub ich DBGRID, damit kannst du zumindest mit dem sort SQL die daten darin einfügen. Ob man jetzt von oben nach unten abarbeiten kann um den insert durchzuführen weiß ich nicht genau, aber ich denke schon.

Ja, das würde mir schon reichen. Das hab ich jetzt auch versucht, ich meine mit nem neuen Query, neuen Datasource und DBGrid auf den Datasource gelegt. Da muss aber noch n Fehler drin sein, oder es ist doch nicht möglich

@ANDI
Zitat:
Der SQL stimmt schon, er bekommt ja glaub auch ein Ergebnis, hab ich jedenfalls so verstanden. Aber die Datenbank wird ja nur gelesen, nicht verändert.... Sortiert wird nur die Ausgabe des selects, aber nicht die Datenbank selber....

Er hätte halt gerne, warum auch immer, die Datenbank sortiert...

Stimmt wohl, nur wie kann ich die Sortierung ausgeben lassen, im DBGrid?

Ich muss das sortieren laßen, zur Übersicht. Das Programm ist im Testlauf, und jenes wurde als 1. Punkt bemängelt.

_________________
... ich kann doch nichts ...
Andi1982
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 497

WinXP HE
D6 Enterprise
BeitragVerfasst: Fr 05.12.03 13:19 
Also hier im Geschäft kann ich dir das leider nicht beantworten, weiß nur noch dass ich da auch ziehmlich lange rumgemacht habe... ist aber doch ganz einfach gewesen :-) ich poste es später mal von zu hause aus!!! Vielleicht ist ja noch jemand da der das schon auswendig kann...

in diesem tut www.delphi-treff.de/...urs/index.php4?kat=8 wird das dbgrid auch verwendet, vielleicht findest du da was...

_________________
Solange die Bombe tickt ist alles in Ordnung, erst wenn sie damit aufhört wird es problematisch...
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 05.12.03 13:30 
Das DBgrid wird nichts anderes machen, als die Datensätze irgendwie anzuzeigen. Zur Sortierung dient schließlich das ORDER BY. Allerdings sehe ich gerade, daß nur das Datum selektiert ist, sonst nichts. Records mit gleichem Datum sind dann natürlich sowieso unsortiert. Ist das egal ?

_________________
Gruß
Hansa
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Fr 05.12.03 13:35 
Andi1982 hat folgendes geschrieben:
Also hier im Geschäft kann ich dir das leider nicht beantworten, weiß nur noch dass ich da auch ziehmlich lange rumgemacht habe... ist aber doch ganz einfach gewesen :-) ich poste es später mal von zu hause aus!!! Vielleicht ist ja noch jemand da der das schon auswendig kann...

in diesem tut www.delphi-treff.de/...urs/index.php4?kat=8 wird das dbgrid auch verwendet, vielleicht findest du da was...

Danke Andi,
ich hab gerade noch was verändert und jetzt siehts schon besser aus:
Ich hab den neuen Query (Querysort) wieder auf den alten Datasource der Tabelle gelegt, den neuen Datasource (sortDatasource) habe ich auf den sortQuery verwiesen und den Grid auf sortDatasource.

Und nun? Jetzt gehts schon... juhuu! Geil! Aber leider sortiert das Programm nur nach TT, sprich von TT.MM.JJJJ wird nur TT angeschaut und danach sortiert. Was natürlich ne Fehlerquelle ist.

der Code sieht jetzt so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Querysort.Close;
Querysort.SQL.Clear;
Querysort.SQL.Add('select * from "t:eDienstreisebuch\mainDB.dbf" ORDER BY DATUM');
Querysort.Active:=True;


Aber nun bin ich schon eine ganze Ecke weiter, bedanke mich auch für eure Ideen.
Wenn noch jemand weiß, wie ich nun gänzlich nach dem Datum sortieren kann, dann wäre mir sehr geholfen.

Andi, poste doch trotzdem mal das, was du zuhause davon noch rumliegen hast. Vielleicht hilfts mir noch weiter, oder jemand der n ähnliches Problem hat.

Thx euch!

_________________
... ich kann doch nichts ...
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Fr 05.12.03 13:36 
hansa hat folgendes geschrieben:
Das DBgrid wird nichts anderes machen, als die Datensätze irgendwie anzuzeigen. Zur Sortierung dient schließlich das ORDER BY. Allerdings sehe ich gerade, daß nur das Datum selektiert ist, sonst nichts. Records mit gleichem Datum sind dann natürlich sowieso unsortiert. Ist das egal ?
Nein, das ist nicht egal. Das hab ich auch gleich geändert :D .

_________________
... ich kann doch nichts ...
LuckyStrike4life Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 196

Win 2000, XP, SuSE Linux 8.2
D5 Enterp.
BeitragVerfasst: Fr 05.12.03 15:06 
Ja... ich habs jetzt endlich!!

Ich schreib noch mal alles auf, was man braucht um soetwas zu realisieren. Vielleicht gibts ja irgendwann eine ähnliche Frage.

Problem: Dateninhalt einer Datenbank muss nach dem eingetragenem Datum sortiert werden.

Lösung mit hilfe von SQL,
benötigt wird
ein TQuery = querysort
ein TDataSource = sortdatasource
ein TDBGrid = sortdbgrid
eine Datenbank = XXXX.dbf (in dem Fall dBase)
ein TDataSource der auf die DB verweißt = XXXXdatasouce
ein TTable welche die Angaben und die Verknüpfung zu XXXXDB hat
und diesen Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
Querysort.Close;
Querysort.SQL.Clear;
Querysort.SQL.Add('select * from "t:eDienstreisebuch\mainDB.dbf" ORDER BY DATUM');
Querysort.Active:=True;


1. der 'querysort' wird mit dem 'xxxxdatasource' verbunden
2. der 'xxxxdatasource' muss auf die 'xxxxtable' verweisen
3. die 'xxxxtable' muss die Daten zu XXXX.dbf beinhalten
4. der 'sortdbgrid' muss auf den 'sortdatasource' verweisen
5. der 'sortdatasource' muss mit dem 'querysort' verbunden werden

Den Code ins Programm einbinden wie man mag, gleich beim Starten (FormCreate) oder per ButtonClickFunktion - wie man mag.

Hier wird nach Datum sortiert, dafür laß ich das Feld 'DATUM' Auswählen. Wichtig ist daber, dass das Feld fürs Datum auch als Datums Feld deklariert ist, in der Datenbank.

So, dass wars.

So würde ich mir jedes geklärte Thema vorstellen, dann wäre das Forum noch hilfreicher.

Danke an alle!

_________________
... ich kann doch nichts ...