Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: C++ Datensätze durchsuchen und sortieren

  1. #1
    Registriert seit
    02.03.2007
    Beiträge
    103
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich bin gerade dabei eine kleines Programm in C++ zu schreiben, das unseren eigenen SPS-Lagerbestand auflistet.
    Die Datenbank an sich funktioniert einwandfrei, aber ich habe Probleme mit der Suchfunktion und der alphabetischen Auflistung.

    Software: Borland C++ Builder

    Als Datenbank kommt Paradox7 zum Einsatz.
    Die Datenzugriffelemente sind TTable und TDataSource.
    Das Eingabefeld für die Suche ist ein TEdit-Element und nennt sich Edit1.
    Bei der Suche sollen alle Elemente angezeigt werden, die den Suchstring enthalten.

    Die Filter von TTable wollen bei mir nicht funktionieren.

    Ich habe bereits folgendes für die Suchfunktion probiert:
    Code:
    void __fastcall TForm1::Table1FilterRecord(TDataSet *DataSet, bool &Accept)
    {
    if(Edit1->Text==""){
    Table1->Filtered=false;
    Table1->Refresh();
    }
    else
    {
    Accept=Edit1->Text==Table1->FieldByName("MLFB")->AsString;
    }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Edit1Change(TObject *Sender)
    {
     Table1->Filtered=true;
    }
    Das funktioniert, nur mit der Einschränkung, dass alle Datensätze angezeigt werden, die GENAU dem Text entsprechen, der eingegeben wurde.
    Es sollen, wie bereits erwähnt, alle Datensätze angezeigt werden, die den Suchstring enthalten. Meine Funktion erfüllt die Vorgabe nicht!
    Wie kann ich diese Suche nach meiner Vorgabe programmieren?

    Die Tabelle möchte ich auch gerne nach der MLFB sortieren, weiß aber nicht, wie ich das mit meinen Elementen machen soll.
    Die Tutorials, die ich im INet gefunden habe, beziehen sich alle auf Delphi.
    Wie kann man denn ein TTable mit C++ sortieren?

    Gruß und vielen Dank im Voraus,
    Forumaner
    Zitieren Zitieren C++ Datensätze durchsuchen und sortieren  

  2. #2
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Beitrag

    Hallo,

    Zitat Zitat von Forumaner
    Wie kann ich diese Suche nach meiner Vorgabe programmieren?
    Zitat Zitat von Forumaner
    Wie kann man denn ein TTable mit C++ sortieren?
    Setze ein TQuery ein und mache entsprechende SQL-Abfragen gegen die Datenbank.

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren SQL ist Deine Lösung  

  3. #3
    Registriert seit
    02.03.2007
    Beiträge
    103
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo Question_mark,

    ich habe nun nicht mehr auf Table1, sondern auf Query1 verwiesen und ich konnte mit einer SQL-Anweisung die Datensätze sortieren, danke für den Tip!
    Nur leider kann ich nun keine Änderungen mehr in den DBEdit-Eingabefeldern machen und das DBGridControl lässt auch keinen Neueintrag bzw. keine Änderung zu. Die Datensätze kann ich aber noch immer mit dem DBGridControl durchscrollen!
    Warum schafft jede Lösung immer neue Probleme?

    Außerdem ist es mir noch nicht gelungen das Textfeld Edit1 mit meiner Suchfunktion zu verknüpfen.

    Anbei das Projekt, erstellt mit dem Borland C++ Builder 1 und der abgespeckten Datenbank...

    Verzweifelte Grüße,
    Forumaner
    Angehängte Dateien Angehängte Dateien

  4. #4
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Beitrag

    Hallo,

    Zitat Zitat von Forumaner
    Außerdem ist es mir noch nicht gelungen das Textfeld Edit1 mit meiner Suchfunktion zu verknüpfen.
    Zuerst mal hast Du beim Edit1 den falschen Event "OnChange" verwendet. Dadurch wird bei jedem in das Editfeld eingegeben Zeichen schon ein Event ausgelöst und das ist nicht in Deinem Sinne...
    Verwende hier lieber "OnExit", dann wird der Event nur einmal beim Verlassen des Feldes ausgelöst.

    Beim TQuery1 hast Du den SQL-Text fest verdrahtet. Damit kannst Du das Query nur einmal in Deiner Anwendung sinnvoll nutzen. Weise der Eigenschaft "Query1.SQL" den Text dynamisch zur Laufzeit zu. Dann kannst Du das Query mehrfach nutzen. Etwa so :
    Query1.Close;
    Query1.SQL.Add('Select * ');
    Query1.SQL.Add('FROM sps25 ';
    Query1.SQL.Add('ORDER BY 1,3');
    (Alternativ geht auch : Query1.SQL := 'SELECT * FROM sps25 ORDER BY 1,3')
    Query1.Execute oder Query1.Open (hängt von der Art der SQL Abfrage ab, die Taste F1 hilft Dir weiter.

    Benutze den eingegebenen Text in Edit1 als Suchkriterium in Deinem SQL-Statement. Benutze in Deinem Statement den "LIKE" Operator, mehr dazu findet sich in einigen Tutorials im Internet, das will ich jetzt hier nicht alles abschreiben.

    Gruß

    Question_mark

    PS : Upps, habe versehentlich die Delphi Syntax benutzt. Aber das sollte kein Problem sein, die Funktionen und Parameter sind bei Borland C++ Builder die gleichen.
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Mal ein paar Hinweise  

  5. #5
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Beitrag

    Hallo,

    Deine Schreibweise der MLFB (z.B. 6ES5-308-UB11) ist etwas ungewöhnlich. Verwende lieber die Siemens Schreibweise 6ES5308-3UB11, sonst bringst Du die Anwender Deines Programms zur Verzweifelung.

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Noch was  

  6. #6
    Registriert seit
    25.09.2005
    Ort
    Neuss
    Beiträge
    278
    Danke
    11
    Erhielt 31 Danke für 29 Beiträge

    Standard

    In Delphi gibts an der TTable so schöne Funktionen wie "Find" und FindNearest" - die wird's doch in Borlands-C++ auch geben.

  7. #7
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Blinzeln

    Hallo,

    Zitat Zitat von HeizDuese
    die wird's doch in Borlands-C++ auch geben.
    Natürlich gibt es das auch im Borland C++ Builder, der ist ja schließlich mit Delphi programmiert worden . Daher gibt es im Borland C++ Builder immer ein Äquivalent zu Delphi.
    Der Forumaner verwendet jedoch noch Paradox mit der Borland BDE, die von Borland in der nächsten Version nicht mehr unterstützt wird. Insofern war die Wahl von Paradox und BDE als Datenbank nicht sehr glücklich. Darauf wollte ich aber eigentlich gar nicht weiter eingehen. Damit der Forumaner aber seinen Quellcode später auf eine andere Datenbank (Firebird, Interbase, MS SQL Server etc.) ohne wesentliche Programmänderungen portieren kann, habe ich dann mal den Weg über TQuery und SQL aufgezeigt. Zumal bekannt ist, dass Paradox und BDE eben nicht fehlerfrei zusammenarbeiten ..., aus eigener, leidvoller Erfahrung.
    Support und Updates zur BDE sind von Borland schon vor vielen Jahren eingestellt worden, alle bekannten Fehler leben noch weiter, wie vor ein paar Jahren schon.
    Sinnvoller wäre der Einsatz einer der o.a. Datenbanken, aber eigentlich habe ich bei Durchsicht des Quellcodes vom Forumaner bemerkt, dass der TE noch nicht besonders viele Zeilen eigenen Quellcode generiert hat und sich da etwas auf Neuland bewegt. Also erstmal wollte ich den Weg aufzeigen, dem TE einige Erfolgserlebnisse und Verständnis für Datenbanken zu geben und die Vorgehensweise aufzuzeigen. Eben auf Grund der Tatsache, dass der TE alles ganz schön im Borland C++ Designer zusammengeklickt hat, dadurch eine ganze Menge Quellcode automatisch erzeugt hat, aber da sind vielleicht max. 10 Zeilen Quellcode, die er selber beigesteuert hat

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Auf die richtige Schiene bringen  

  8. #8
    Registriert seit
    02.03.2007
    Beiträge
    103
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo!

    Zitat Zitat von Question_mark Beitrag anzeigen
    Zuerst mal hast Du beim Edit1 den falschen Event "OnChange" verwendet. Dadurch wird bei jedem in das Editfeld eingegeben Zeichen schon ein Event ausgelöst und das ist nicht in Deinem Sinne...
    Verwende hier lieber "OnExit", dann wird der Event nur einmal beim Verlassen des Feldes ausgelöst.
    Eigentlich nicht. Ich wollte den Datensatz immer durchsuchen lassen, wenn eine Eingabe im Edit1 getätigt wurde.
    Einen Buttonklick oder einen Mausklick nach der Eingabe möchte ich vermeiden, darum habe ich "OnChange" gewählt.


    Zitat Zitat von Question_mark Beitrag anzeigen
    Beim TQuery1 hast Du den SQL-Text fest verdrahtet. Damit kannst Du das Query nur einmal in Deiner Anwendung sinnvoll nutzen. Weise der Eigenschaft "Query1.SQL" den Text dynamisch zur Laufzeit zu. Dann kannst Du das Query mehrfach nutzen. Etwa so :
    Query1.Close;
    Query1.SQL.Add('Select * ');
    Query1.SQL.Add('FROM sps25 ';
    Query1.SQL.Add('ORDER BY 1,3');
    (Alternativ geht auch : Query1.SQL := 'SELECT * FROM sps25 ORDER BY 1,3')
    Query1.Execute oder Query1.Open (hängt von der Art der SQL Abfrage ab, die Taste F1 hilft Dir weiter.
    [...]
    Benutze den eingegebenen Text in Edit1 als Suchkriterium in Deinem SQL-Statement. Benutze in Deinem Statement den "LIKE" Operator
    Query1.Close etc. hatte ich auch schon ausprobiert, aber der Compiler meckert rum.
    Ich bin mir sicher, dass ich diese Anweisungen nur an die falsche Stelle geschrieben habe, aber ich weiß nicht, wo ich diese Querys reinschreiben soll.


    Zitat Zitat von Question_mark Beitrag anzeigen
    Deine Schreibweise der MLFB (z.B. 6ES5-308-UB11) ist etwas ungewöhnlich. Verwende lieber die Siemens Schreibweise 6ES5308-3UB11, sonst bringst Du die Anwender Deines Programms zur Verzweifelung.
    Ich möchte das Minuszeichen generell aus der Suche rausnehmen, d.h. das Minuszeichen soll komplett übersehen werden. Ist doch bestimmt möglich soetwas zu realisieren?!

    Zitat Zitat von Question_mark Beitrag anzeigen
    Der Forumaner verwendet jedoch noch Paradox mit der Borland BDE, die von Borland in der nächsten Version nicht mehr unterstützt wird. Insofern war die Wahl von Paradox und BDE als Datenbank nicht sehr glücklich.
    Ich verwende Paradox, weil mir diese Datenbank am einfachsten erschien.
    Lieber wäre mir eine SQL-Datenbank, aber ich habe keinen Plan, wie ich eine Paradox-Tabelle in eine SQL-Tabelle umwandeln kann.

    Zitat Zitat von Question_mark Beitrag anzeigen
    [...], aber eigentlich habe ich bei Durchsicht des Quellcodes vom Forumaner bemerkt, dass der TE noch nicht besonders viele Zeilen eigenen Quellcode generiert hat und sich da etwas auf Neuland bewegt. Also erstmal wollte ich den Weg aufzeigen, dem TE einige Erfolgserlebnisse und Verständnis für Datenbanken zu geben und die Vorgehensweise aufzuzeigen. Eben auf Grund der Tatsache, dass der TE alles ganz schön im Borland C++ Designer zusammengeklickt hat, dadurch eine ganze Menge Quellcode automatisch erzeugt hat, aber da sind vielleicht max. 10 Zeilen Quellcode, die er selber beigesteuert hat
    RICHTIG ERKANNT!
    Ich habe vor einigen Tagen in meinen alten Sachen rumgekramt und fand das Buch "C++ für Kids" (bitte nicht lachen)!
    Da wurde ich natürlich neugierig und installierte den auf CD mitgelieferten Borland C++ Builder 1 (Vollversion).
    Mit Verwunderung stellte ich fest, dass der Builder 1 auch eine komplette Datenbankoberfläche bereit stellt. Im Buch wird keine einziges Wort über Datenbanken verloren.
    Aber trotzdem finde ich einige Tipps im Kids-Buch, die ich gebrauchen kann.

    Und warum ich das Ganze in C++ machen will... Nun ja, ich drücke neben der Arbeit die Schulbank und dort werde ich auch bald programmieren müssen.
    Die Programmier-Sprache ist C, darum wollte ich gleich in C einsteigen. Da kam mir das Buch "C++ für Kids" sehr gelegen.
    Der Builder ist richtig gut, weil man alle Elemente schön mit der Maus zusammenklicken kann.
    Der Programm-Ablauf ist mir klar, ich weiß auch, wie das Programm arbeiten sollte, aber ich weiß wirklich nicht, wo ich welche Anweisungen definieren und reinschreiben muss.

    Ein Grundlagenbuch wäre nicht schlecht, aber ich denke, so eine einfache Sache (Datensätze anzeigen, durchsuchen, editieren) könnte man auch ohne ein teures Buch -aber mit externer Hilfe- programmieren?!

    Gruß,
    Forumaner

  9. #9
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Blinzeln

    Hallo,

    Zitat Zitat von Forumaner
    installierte den auf CD mitgelieferten Borland C++ Builder 1 (Vollversion).
    Dürfte nach meiner Erinnerung ein 16-Bit Compiler aus der zweiten Hälfte der letzten Dekade des letzten Centenarium im letzten Millenium sein

    Mal zwei kurze Fragen :

    1) Möchtest das Programm zur Ersatzteilverwaltung nur als Projekt zum Erlernen von C++ programmieren ?
    2) Oder möchtest Du es im täglichen Betrieb auf der Arbeit produktiv einsetzen ?

    War jetzt eher eine Scherzfrage, die Antwort ist mir eigentlich egal. Und gib die CD zum Recycling ....

    Du kannst Dir hier kostenlos eine aktuelle Version eines C++ Builders als Turbo C++ herunterladen.

    http://www.delphipraxis.net/turbo_delphi_download.php

    Den Registrierschlüssel erhältst Du kostenlos von Borland (b.z.w. heute CodeGear).

    Suche im angegeben Link nach "turboccp_de.iso.zip". Die einzige Einschränkung der PE (Personal Edition) gegenüber der kostenpflichtigen Vollversion : Man kann keine Fremdkomponenten von anderen Anbietern in die Komponentenpalette einbinden. Aber die Dynamische Einbindung von Fremdkomponenten per Quellcode ist trotzdem möglich.
    Damit hast Du erstmal kostenlos, aber legal eine moderne Entwicklungsumgebung und C++ Compiler. Bei Bedarf kannst Du später auf die kostenpflichtige Professional Version hochrüsten.
    Und damit Du auch eine vollwertige (aber kostenlose) SQL-Datenbank bekommst, sieh mal hier :

    http://www.microsoft.com/downloads/d...DisplayLang=de

    Oder google mal nach "Firebird", auch eine kostenlose, aber vollwertige DB, die auch von Turbo C++ unterstützt wird.

    Egal ob Du Dein Programm nur zu Lernzwecken oder zum produktiven Einsatz schreibst, schmeiss den alten Sch..s über Bord.

    Gruß

    Question_mark

    PS : Und bitte die Lizenzbedingungen für den kommerziellen Einsatz und die Systemvoraussetzungen unbedingt beachten !
    Geändert von Question_mark (15.05.2008 um 00:00 Uhr) Grund: PS angefügt
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Gib die CD zum Recycling ...  

  10. #10
    Registriert seit
    02.03.2007
    Beiträge
    103
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo.

    Zitat Zitat von Question_mark Beitrag anzeigen
    Dürfte nach meiner Erinnerung ein 16-Bit Compiler aus der zweiten Hälfte der letzten Dekade des letzten Centenarium im letzten Millenium sein
    Oh ja, dort sind noch Komponenten für Win3.1 und Win95 enthalten!

    Zitat Zitat von Question_mark Beitrag anzeigen
    1) Möchtest das Programm zur Ersatzteilverwaltung nur als Projekt zum Erlernen von C++ programmieren ?
    2) Oder möchtest Du es im täglichen Betrieb auf der Arbeit produktiv einsetzen ?
    Wir haben auf der Arbeit einen eigenen Bestand an Reserveteilen.
    Diesen Bestand nehmen wir mittels einer Excel-Tabelle auf, aber es macht mehr her, wenn ein Programm mit Datenbank zum Einsatz kommt.
    Natürlich möchte ich in erster Linie C++ erlernen! Und ja, das Programm hat anschließend eine wirkliche Verwendung bei uns im Betrieb!

    Zitat Zitat von Question_mark Beitrag anzeigen
    Du kannst Dir hier kostenlos eine aktuelle Version eines C++ Builders als Turbo C++ herunterladen.
    http://www.delphipraxis.net/turbo_delphi_download.php
    Den Registrierschlüssel erhältst Du kostenlos von Borland (b.z.w. heute CodeGear).
    Vielen Dank für den Link. Turbo C++ habe ich mir heruntergeladen und lizensiert. Hat alles bestens geklappt, nur jetzt muss ich mich in eine sehr gewöhnungsbedürftige Oberfläche einarbeiten.
    Außerdem muss ich irgendwie die alte *.mak-Datei in ein aktuelles Borland-Projekt umwandeln, damit ich es mit dem Turbo C++ einlesen kann.

    Zitat Zitat von Question_mark Beitrag anzeigen
    Und damit Du auch eine vollwertige (aber kostenlose) SQL-Datenbank bekommst, sieh mal hier :
    http://www.microsoft.com/downloads/d...DisplayLang=de
    Oder google mal nach "Firebird", auch eine kostenlose, aber vollwertige DB, die auch von Turbo C++ unterstützt wird.
    Hört sich sehr gut an! Ich kann aber nach neuester Erkenntnis keinen SQL-Server oder ähnliches auf unserem Rechner im Büro installieren, Programme ausführen ist kein Problem. Die BDE ist auch installiert, also gäbe es keine Probleme mit der Paradox-Tabelle. Mal sehen, ob der Turbo C++ auch noch die Paradox-Tabelle unterstützt, wenn ja, dann bleibt es erst einmal bei Paradox.

    Zitat Zitat von Question_mark Beitrag anzeigen
    PS : Und bitte die Lizenzbedingungen für den kommerziellen Einsatz und die Systemvoraussetzungen unbedingt beachten !
    Von der Delphipraxis-Seite:
    Darf ich mit den Turbos kommerziell entwickeln?
    Ja, die kommerzielle Entwicklung ist mit den Turbos gestattet.
    Ich werde mir nun Turbo C++ genauer ansehen und versuchen mich dort einzuarbeiten.

    @Question_mark:
    Könntest du mir mehr unter die Arme greifen und mir eine kleine Umsetzung meines Vorhabens anhand meines Programms zeigen?

    Gruß,
    Forumaner
    Geändert von Forumaner (15.05.2008 um 12:32 Uhr) Grund: Ergänzung

Ähnliche Themen

  1. Datensätze
    Von zloyduh im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 13.11.2010, 21:34
  2. Daten sortieren DB1 -> DB2
    Von momo99 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.11.2009, 15:02
  3. sortieren in awl
    Von cosmo im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 15.08.2008, 10:56
  4. Rezepturen und Datensätze
    Von eini im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 15.11.2006, 08:56
  5. VAT sortieren?
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 03.01.2006, 11:23

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •