(Anfänger) Suche Hilfe beim Erstellen einer Rezeptdatenbank



  • Hallo,
    also ganz kurz: Ich habe diese Woche ein Buch "C++ for Kids" von Hans-Georg Schumann durchgearbeitet. Habe einige Grundlagen gelernt wie den Umgang mit C++ Builder 1.0, Was ist objektorientiert was sind Klassen, Instanzen, Methoden, virtuelle Klassen usw.
    Nun brauche ich etwas zum üben. Mein Vater hätte gern eine Datenbank von Kochrezepten, zu der man neue hinzufügen kann, in der man suchen kann. usw.

    Ich habe mir vorgestellt, das es vielleicht so aussehen könnte:
    http://img514.imageshack.us/my.php?image=dbkz7.gif

    Jetzt meine Frage: Wie kann ich zum Beispiel die Rubrikliste aus einer externen Datei aufrufen?



  • Also ich bin jetzt soweit:
    ich denke ich brauche eine Tabelle

    |ID|Rezeptname|Rezeptrubrik|Quelle der Zubereitung.txt|Quelle des Bildes.bmp|

    dann bei Click im TreeView alles ins Formular einbinden (rechts)

    Doch wie erstelle ich eine solche Tabelle?
    oder ist es besser eine richtige Datenbank zu nehmen?
    Denn ich will am Ende eine Suchfunktion einbauen, in der man die Rezeptnamen und Zubereitung durchforsten kann.

    Bisher habe ich schon den Inhalt einer txt Datei in ein TreeView geladen
    doch leider ist es dann nicht möglich Knotenpunkte anzulegen.
    Habt ihr da vielleicht einen Tip?



  • Hiho
    Zuerst ein paar fragen:
    Möchtest du denn eine (Firebird)Datenbank verwenden(das ist zwar schwerer, aber es ist einfacher zu organisieren)?
    Soll das ganze portabel sein(wenn du zb Firebird verwendest, musst du Firebird überall installieren, wo das programm laufen soll)?

    Oder hab ich das ganz falsch verstanden???
    mfg allison



  • Hallo

    Von Firebird gibt es auch embedded-Variante, die ohne dedizierte Serverinstallation läuft.

    Und solange für deine Daten eine einfache flache Tabelle reicht würde grundsätzlich auch eine Textdatei, sprich CSV-Datei ausreichen. Natürlich wäre eine richtigte SQL-Datenbank grad zum Lernen noch besser, aber dann wirst du erstmal viel ausprobieren und lernen müßen.

    bis bald
    akari



  • hiho
    @ akari
    hast recht(wie immer 😉 ) hab ich vergessen(ich bin seit ca 2 wochen an nem Projekt mit dem "normalen" firebird, da vergisst man sowas)
    @ lbs
    also mit Firebird könnt ich dir helfen.

    mfg allison



  • Nun ja, eine richtige Datenbank hätte den Vorteil, dass man Filter-, Such- und Sortiermöglichkeiten praktisch geschenkt bekommt. Andererseits kann es auch nicht schaden, so etwas mal selbst programmiert zu haben. Den zeitlichen Aufwand würde ich ungefähr gleich einschätzen.

    Zum Tabellenaufbau möchte ich noch anmerken, dass ich die Rezeptrubriken in einer eigenen Tabelle unterbringen würde und nur die Id aus dieser neuen Tabelle in die Haupttabelle bringen würde. Aber das fällt dann schon in den Bereich der Datenbanknormalisierung. Das ist dann ein weiteres komplexes Thema, in das man sich einarbeiten muß...



  • @Allison

    Also ich wäre für Hilfe dankbar 🙂
    Habe die Firebird Datenbank installiert, läuft auch im Hintergrund als Dienst

    Aber wie kann ich jetzt z.B. den Inhalt eines TStringGrid in eine Datenbank unter
    Firebird ablegen? Habe schon Internet usw. abgesucht, aber scheinbar erkenne ich es nicht 😉

    Wie sind denn die ersten Schritte (wäre ja mal was für's FAQ)?

    Danke für jeden Tipp.

    Gruss Stefan



  • Hallo

    Das braucht man nicht in die FAQ zu schreiben, denn wenn du statt dem TStringGrid einfach das TDBGrid nimmst kannst du den Inhalt eines T...Query über eine TDataSource automatisch anzeigen lassen.
    Siehe dazu die Beispielprogramme unter <BCB-Path>/Examples/DBTasks sowie die BCB-Hilfe zu den Datensensitiven Controls. Natürlich ist dort als DB die alte DBE, die eigentlichen nichtvisuellen Datenkomponenten must du natürlich in der Firebird-Doku nachschlagen.

    bis bald
    akari



  • Hei, Akari

    ist leider bei mir im BCB6 Personal nicht dabei.
    Weiss jemand ab welcher Version es enthalten ist bzw.
    ob es das auch einzeln zum nachinstallieren gibt?

    Grüsse, Stefan



  • hiho
    hast du die Reiter dbExpress,ADO,Datensteuerung oder IterBase?
    mfg allison



  • @Allison

    nein leider nicht...

    Gruss Stefan



  • Hallo, Allison

    leider nein.

    In welcher Version BCB2006 bzw. der neue BCB2007 sind die denn enthalten?
    Denke über ein Update nach und möchte dann natürlich auch das richtige erwerben.

    Oder gibt es für den BCB6 die Komponente auch einzeln?

    Grüsse Stefan



  • hiho
    ich hab die Professional Version(nicht privat)
    da is alles drin
    da findest du infos: http://www.codegear.com/products/cppbuilder
    aber mehr weiss ich nicht 😞
    mfg allison



  • Guten Morgen,

    also erstmal Danke, für die zahlreichen Ideen und Hilfen. Ich denke ich werde es auf dem "simplen" Weg versuchen. Also erstmal mit einer CSV um Suchen, Filter mal selbst zu programmieren.

    Jetzt weiß ich aber immernoch nicht wie ich das anstellen soll, das Buch an dem ich mich gehalten habe ist zu Ende, und ich hab vorerst kein Zugang zu neuen Büchern.
    Ich bin also auf Euch angewiesen.
    Fangen wir doch mal klein an.
    Ich erstelle eine .txt Datei in der ich 3-4 Rezeptrubriken eintrage.
    (Suppen, Vorspeisen, Hauptgerichte)
    Dann erstelle ich ein Formular mit einem TreeView. Dann lade ich diese .txt dahinein.

    TreeView1->LoadFromFile ("C:\\cp\\rzptdb\\rubriken.txt");
    

    So das hat schon wunderbar funktioniert. Nun habe ich einen Button erstellt "Neue Rubrik".
    Wenn ich da raufklicke, soll sich ein Eingabefenster öffnen in dem ich eine neue Rubrik eingebe, und dann wird diese zur .txt hinzugefügt. Wie mache ich das?



  • hiho
    du erstellst einfach eine 2. Form, machst ein EditFeld und einen Button drauf
    Code:

    void __fastcall TForm2::OKClick(TObject *Sender)
    {
    Form1->TreeView->Items->Add(Form2->Edit->Text);
    Form2->Close();
    }
    

    In Form 1

    void __fastcall TForm1::NeueRubrikClick(TObject *Sender)
    {
    Form2->Show();
    }
    

    (ungetestet)
    [edit] sry, hab deine Frage ja gar nicht beantwortet 😉
    das hier ersetzt das Obere:

    void __fastcall TForm2::OKClick(TObject *Sender)
    {
    Form1->TreeView->Items->Add(Form2->Edit->Text);
    Form1->TreeView->SaveToFile(*Dein_Pfad*);
    Form2->Close();
    }
    

    [/edit]
    mfg allison



  • 1. Ich würd es gern mit einer InputBox machen (die hab ich auch schon)
    Nur weiß ich da nicht wie ich das mit dem Add bei einer InputBox machen muss.

    (2. es muss ja am Ende oder besser gleich in der .txt gespeichert werden.)
    ohh war ich wieder zu schnell



  • so weit bin ich jetzt:

    void __fastcall TForm1::newrubrikClick(TObject *Sender)
    {
    Text1 = InputBox ("Neue Rubrik","Geben Sie die neue Rubrik ein:","neue Rubrik");
    TreeView1->Items->Add(Text1);
    TreeView1->SaveToFile(pfad_rubrik);
    }
    

    Doch:
    Cannot Convert 'System::AnsiString' to 'Comctrls::TTreeNode *'.

    Type mismatch in parameter 'Node' in call to '_fastcall Comctrls::TTreeNodes::Add(Comctrls::TTreeNode*,const System::AnsiString)'.

    Too few parameters in call to '_fastcall Comctrls::TTreeNodes::Add(Comctrls::TTreeNode *, const System::AnsiString)'.



  • hiho
    sry für den ****, den ich da geschrieben hab. (ich hab gedacht, es geht so, wie bei einer ListBox)

    TreeView1->Items->Add(NULL, Text1);
    

    so muss es sein
    SChau auch mal unter der BCB-Hilfe nach(such nach "TreeView Add"):

    void __fastcall TForm1::Button1Click(TObject *Sender)
    
    {
      TTreeNode *Node1;
      TreeView1->Items->Clear(); // Existierende Knoten entfernen
      // Stammknoten hinzufügen
      TreeView1->Items->Add(NULL, "RootNode1");
    
      /* MyTreeNode wird der erste Knoten in der Baumstruktur zugewiesen, dann wird ein untergeordneter Knoten hinzugefügt */
      Node1 = TreeView1->Items->Item[0];
      TreeView1->Items->AddChild(Node1,"ChildNode1");
    
      // Anderen Stammknoten hinzufügen
      TreeView1->Items->Add(Node1, "RootNode2");
    
      /* Node1 wird auf RootNode2 zurückgesetzt, dann wird ein untergeordneter Knoten hinzugefügt */
    
      Node1 = TreeView1->Items->Item[2];
      TreeView1->Items->AddChild(Node1,"ChildNode2");
    
      /* Node1 wird auf ChildNode2 zurückgesetzt, dann wird ein untergeordneter Knoten hinzugefügt */
      Node1 = TreeView1->Items->Item[3];
      TreeView1->Items->AddChild(Node1,"ChildNode2a");
    
       /* Hinter ChildNode2a wird ChildNode2 ein weiterer Knoten hinzugefügt */
      TreeView1->Items->AddChild(Node1,"ChildNode2b");
    
      // Anderen Stammknoten hinzufügen
      TreeView1->Items->Add(TreeView1->Items->Item[0], "RootTreeNode3");
    
    }
    

    da steht alles drin(denk ich)
    mfg allison



  • Ok, das habeich jetzt ausprobiert, funktioniert alles super:
    dann wollte ih es so machen:

    void __fastcall TForm1::FormCreate(TObject * Sender)
    {
      TTreeNode *Node1;
      TreeView1->Items->Clear();
      TreeView1->Items->Add(NULL, TreeView1->LoadFromFile (pfad_rubrik));
    }
    

    Doch:
    Cannot Convert void to System::AnsiString
    Node1 is declared but never used;



  • Hallo

    Ja du hast doch schon rausgefunden was du Add übergeben must. Warum räts du wild rum anstatt in die BCB-Hilfe zu schauen? Wenn du LoadFromFile benutzt brauchst du kein Add mehr.

    bis bald
    akari


Anmelden zum Antworten