Zum Inhalt springen

Datenbank erstellen


aLeXanDer..

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Allerdings sieht dein Code sehr nach ziellosem Herumbasteln aus.
:floet:

So schlimm würd ich das nicht ausdrücken. Hab ja ein Ziel verfolgt :P

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

:floet:

So schlimm würd ich das nicht ausdrücken. Hab ja ein Ziel verfolgt :P

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...