aLeXanDer.. Geschrieben 3. Dezember 2007 Geschrieben 3. Dezember 2007 Hallo, Ich würde gern ein Programm schreiben, dass selbst eine Datenbank erstellt und diese dann mit Daten, die schon in einer txt oder ini stehen gefüllt wird. Mein Problem: Wie kann ich meinem Programm sagen : "Erstell mir bitte mal die Drucker.db mit folgenden Spalten.A,B,C" Wenn die Datenbank dann erstellt wurde, soll Sie mit den Werten aus der .txt gefüllt werden. in die Spalte A kommt dann die erste Zeile aus der txt ect. Aber das wäre weniger mein Problem. Ich bräuchte erstmal Hilfe von euch, dass ich eine neue Datenbank mit Code erstellen kann. Danke Mfg Alex Edit : Sorry Falsches Board Bitte in C++ Compiler verschieben Danke Zitieren
Amstelchen Geschrieben 3. Dezember 2007 Geschrieben 3. Dezember 2007 welche datenbank willst du erstellen? sprich: welche engine, welches DBMS? welchen "code" verwendest du? C, CPP? welche abstraktionsebene? ADO? OO4O, ODBC, ...? ansonsten ist das ein ratespiel... :beagolisc s'Amstel Zitieren
aLeXanDer.. Geschrieben 3. Dezember 2007 Autor Geschrieben 3. Dezember 2007 Will die Datenbank mit C++ erstellen Habe Borland Builder 5 folglich ist die BDE - Verwaltung dabei. Nun möchte ich in der BDE Verwaltung unter einem schon existierenden Punkt in dem schon mehrere Datenbanken enthalten sind diese neue hinzufügen. Ist das Ratespiel jetzt einfacher?! oder benötigt man noch mehr Informationen?! Sorry Mfg Alex Zitieren
aLeXanDer.. Geschrieben 4. Dezember 2007 Autor Geschrieben 4. Dezember 2007 Die Endung ist *.db Also wenn ich die .exe (das Programm) starte. soll dort, wo schon mehrere Datenbankdateien vorhanden sind, diese erstellt werden mit dem Namen Drucker.db. Frage : Wie erstelle ich mit reinem C++-Code eine Datenbank? Wie lege ich die Spalten darin fest?! Danach sollen Daten aus einer bereits vorhanden .ini Datei ausgelsen und in die Datenbank geschrieben werden. Mfg Alex Zitieren
Klotzkopp Geschrieben 4. Dezember 2007 Geschrieben 4. Dezember 2007 Schau mal hier rein: Teach Yourself Borland Delphi 4 in 21 Days -- Ch 18 -- Building Database Applications Das ist zwar für Delphi, aber die Vorgehensweise dürfte ähnlich sein. Zitieren
aLeXanDer.. Geschrieben 4. Dezember 2007 Autor Geschrieben 4. Dezember 2007 Danke für den Link Klotzkopp Hab mit ihm das auf die Reihe gebracht. Müsste stimmen. Danke Table1->DatabaseName = "GLT"; Table1->TableType = ttParadox; Table1->TableName = "Drucker"; Table1->FieldDefs->Clear(); TFieldDef *pNewDef = Table1->AddFieldDef(); pNewDef->Name = "MeldekatNR"; pNewDef->DataType = ftInteger; pNewDef->Required = true; pNewDef = Table1->AddFieldDef(); pNewDef->Name = "Druckername"; pNewDef->DataType = ftString; pNewDef->Size = 100; pNewDef->Required = true; pNewDef = Table1->AddFieldDef(); pNewDef->Name = "Zeilenmenge"; pNewDef->DataType = ftInteger; pNewDef->Required = true; pNewDef = Table1->AddFieldDef(); pNewDef->Name = "Koeff"; pNewDef->DataType = ftString; pNewDef->Size = 5; pNewDef->Required = false; Table1->IndexDefs->Clear(); Table1->IndexDefs->Add("","MeldekatNR", TIndexOptions() << ixPrimary ); Table1->IndexDefs->Add("DrucknameIndex","Druckername", TIndexOptions() << ixPrimary ); Table1->CreateTable(); Nur jetzt steh ich wieder vor meinem altbekannten Problem Ich und Strings =) Wie am Anfang schon erwähnt, möchte ich ja jetzt die Spalten füllen mit den Werten aus einer schon bestehenden .ini Datei. Hab mir das so gedacht, dass ich die einzelne Schlüsselwörter die in der Ini stehen auslese und in die richtige Spalte schreibe. Jedoch bin ich dabei nicht sicher ob das von der Syntax richtig is bzw. geht. Also in die .ini Dateil wurde mit WriteProfile... reingespeichert.Jedoch in einem anderen Programm. Ist es dann möglich in diesem Programm den GetProfile... überhaupt anzuwenden?! const char *pFILE = "Drucker.ini"; ifstream inFile(pFILE); if(!inFILE) { ShowMessage ("Fehler beim öffnen der Drucker.ini!"); } while (!inFILE.eof()) { int menge=0, anzahl=0, i=0; char buf[256]; AnsiString str, key; memset(buf,0,strlen(buf)); for(i=0;i<anzahl;i++) { key="Drucker"+IntToStr(i); menge=GetPrivateProfileString(prot.c_str(),key.c_str(), "error", buf, 256, FileName.c_str()); Table1->Add(menge); if(menge<=0) { ShowMessage("Fehler beim Lesen von Drucker.ini."); return; } } Mfg Alex Zitieren
Klotzkopp Geschrieben 4. Dezember 2007 Geschrieben 4. Dezember 2007 Also in die .ini Dateil wurde mit WriteProfile... reingespeichert.Jedoch in einem anderen Programm. Ist es dann möglich in diesem Programm den GetProfile... überhaupt anzuwenden?!Sicher. Das ist ja der Sinn von solchen Dateien: Datenaustausch und Persistenz über die Lebenszeit von Prozessen hinweg. Allerdings sieht dein Code sehr nach ziellosem Herumbasteln aus. Falls Drucker.ini die Datei ist, die du mit GetPrivateProfileString einlesen willst, ist es komplett sinnlos, einen ifstream darauf zu öffnen. Und ein memset mit strlen auf ein uninitialisertes Array ist auch ziemlich gefährlich (ganz abgesehen davon, dass es nicht tut, was du offenbar erwartest). Den Rückgabewert von GetPrivateProfileString in der Datenbank abzulegen, ist auch Unsinn. Ich rate dir dringend, deine anscheinend doch recht großen Grundlagenlücken zu schließen, bevor du dich an solche Aufgaben machst. So kommst du IMHO nicht weit. Ach ja: Den Hinweis in dem anderen Thread auf TIniFile hattest du gesehen? Zitieren
aLeXanDer.. Geschrieben 4. Dezember 2007 Autor Geschrieben 4. Dezember 2007 Allerdings sieht dein Code sehr nach ziellosem Herumbasteln aus. :floet: So schlimm würd ich das nicht ausdrücken. Hab ja ein Ziel verfolgt Recht geb ich dir mit dem ifstream und dem memset. Nur das mit dem Ergebnis aus dem GetProfile... nicht in die Datenbank einzutragen versteh ich nicht. Abgesehen davon das das zu 90% der falsche Ausdruck dafür ist. Wenn ich die Daten auslese, warum sollte ichsie dann nicht in die Datenbank schreiben? Die Datenbank soll ja die .ini Datei ersetzen. Ja das mit TiniFile habe ich gelesen gehabt. Nur in meinem BorlandBuilder5 finde ich es nicht.?!?!:confused: Wo wäre diese denn anzutreffen? Danke Zitieren
Klotzkopp Geschrieben 4. Dezember 2007 Geschrieben 4. Dezember 2007 :floet: So schlimm würd ich das nicht ausdrücken. Hab ja ein Ziel verfolgt Mach was du willst. Ich bin der Meinung, dass du nicht weit kommen wirst, wenn du deine Vorgehensweise nicht änderst. Nur das mit dem Ergebnis aus dem GetProfile... nicht in die Datenbank einzutragen versteh ich nicht.Ist dir klar, was der Rückgabewert von GetPrivateProfileString bedeutet? Der Rückgabewert ist nicht der eingelesene String, sondern die Anzahl der eingelesenen Zeichen, also (im Erfolgsfall) die Länge des Strings. Das kannst du übrigens in der Dokumentation nachlesen. Ja das mit TiniFile habe ich gelesen gehabt. Nur in meinem BorlandBuilder5 finde ich es nicht.?!?!:confused: Wo wäre diese denn anzutreffen? Auch das solltest du der Dokumentation entnehmen können. Nach etwa einer Minute mit Google glaube ich, dass du <IniFiles.hpp> brauchst. Ohne Gewähr. Zitieren
aLeXanDer.. Geschrieben 4. Dezember 2007 Autor Geschrieben 4. Dezember 2007 Ich bin schon still Zitieren
aLeXanDer.. Geschrieben 5. Dezember 2007 Autor Geschrieben 5. Dezember 2007 Bin wieder laut :hells: Ich möchte nur mal eine Frage einwerfen. Bin jetzt so weit vorgegangen das ich das TIniFile benutze und nun möchte ich die Daten die ich mir mit dem TIniFile merke, (In einem AnsiString abgespeichert) in meine zuvor erstellte Datenbank eintragen. Meine Frage ist nun : TIniFile *ini; ini = new TIniFile("Drucker.ini"); //Neue Tabelle erstellen bzw. öffnen TTable* table = new TTable(this); Table1->DatabaseName = "Drucker"; Table1->TableName = "Drucker.db"; [B]//Datenquelle mit Table verbinden TDataSource* datasource = new TDataSource(this); datasource->DataSet = Table1; DBGrid->DataSource = datasource;[/B] Kann ich die TIniFile mit der Datenbank verbinden ? Also anstelle des DBGrid -> TIniFile. Mfg Alex Zitieren
aLeXanDer.. Geschrieben 5. Dezember 2007 Autor Geschrieben 5. Dezember 2007 Ok das verbinden mit TIniFile->DataSource = datasource; ist nicht möglich [C++ Fehler] Unit1.cpp(30): E2108 Ungültige Verwendung von typedef 'TIniFile' Muss ich es überhaupt verbinden? Wenn ja wie ? Mfg Alex Edit : im Post vorher geposteten Code habe ich natürlich den Fehler anstelle von table , Table1 zu schreiben schon bemerkt Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.