Datenbank anlegen/erstellen



  • @Linnea

    Danke für die Info, werd ich ausprobieren.

    Problem: Auf dem ClientRechner ist ja die ExcelTabelle nicht direkt vorrätig, bzw. soll sie erst impprotiert werden.
    Woher weiß ich wo der Client diese Exceldatei abgelegt hat ?
    Oder kann ich erst die Excel-Datei imortieren in ein vorgegebenes Verzeichnis und dann darauf zugreifen?

    Trotzdem habe ich das Problem einer eigenen Datenbank anlegen noch nicht gelöst bekommen.

    Thx@all



  • @Linnea
    Hab ich probiert und soweit gut:

    um eine Excel-Datei als DB-anzusprechen, kannst du z.B. wie folgt vorgehen: 
    1) eine TADOConnection aufs Formular legen 
    2) im Objektinspektor bei LoginPrompt false einstellen 
    3) bei ConnectionString eingeben (Dateipfad bei Data Source anpassen): 
    
    Code: 
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyExcel.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";  
    
    4) Connected bei TADOConnection auf true setzen
    

    Bei4) bekomme ich folgende Fehlermeldung:

    ---------------------------
    Fehler
    ---------------------------
    Syntaxfehler in FROM-Klausel.
    ---------------------------
    OK   Hilfe   Details >>   
    ---------------------------
    

    Den Pfad zur Excel-Datei habe ich angepasst.

    Thx@all



  • Die Meldung müßte vom TADOTable kommen. Stell dort mal TableDirect auf true.

    Zu den anderen Fragen: du kannst den ConnectionString auch zur Laufzeit setzen. Dadurch kannst du ihn vorher auch so anpassen, daß der Pfad dann passt, z.B. mit Hilfe eines TOpenDialog um eine Datei auszuwählen oder mit ExtractFilePath/ExtractFileDir um den Pfad deines Programms zu ermitteln, wenn die Datei immer dort liegen soll.



  • Hi@all

    // Datenfile (Excel-Datei) laden
     if(OpenDialog1->Execute())
     {
      String connstr="Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=";
      connstr += OpenDialog1->FileName;
      connstr +=";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
      ADOConnection1->ConnectionString = connstr;
      ADOConnection1->Connected=true;
      ADOTable1->ConnectionString = connstr;
    
      ADOTable1->TableName  ???
    
      ADOTable1->Active=true;
     }
    

    Woher bekomme ich den Tabellennamen (Tabelle1$), welcher ja verschieden sein kann?
    Hab das hier gefunden, funktioniert aber leider nicht.

    For Each tbl In objAdoCat.Tables 
          Debug.Print tbl.Name, tbl.Type 
       Next tbl
    

    Thx@all



  • schau dir mal von TADOConnection die Funktion GetTableNames an



  • @Linnea

    Danke, hab ich rausbekommen.
    Frage: Ich habe festegstellt, dass die FieldNames Liste alphabetisch sortiert ist. Wie kann ich das unterdrücken bzw. in der Reihenfolge ausgeben wie sie in der Tabelle angelegt sind ?

    TStringList *ItemList = new TStringList;
      ADOConnection1->GetFieldNames(TableList->Strings[0],ItemList);
      ItemList->Sort();
      for(int i = 1;i<ItemList->Count;i++) { ListBox1->Items->Add(ItemList->Strings[i].c_str()); }
    

    Thx@all



  • indem du die Zeile

    ItemList->Sort();
    

    wegläßt...



  • Nein leider nicht.
    Das spielt überhaupt keine Rolle, egal ob da oder nicht, wird trotzdem alphabetisch sortiert.
    Das ist natürlich schlecht, wenn ich die Zuordnungsfelder zur Laufzeit neu setzen muss, wenn die importierte Tabelle andere Spaltenbezeichnun hat wie meine Vorgabe.

    Jemand ne Idee dazu ?

    Thx@all



  • naja, dann macht GetFieldNames das anscheinend immer so 😉

    du kannst auch folgendes tun:

    for (int i=0; i<ADOTable1->FieldCount; i++)
      ListBox1->Items->Add(ADOTable1->Fields->Fields[i]->FieldName);
    

    noch als Hinweise zu deinem Quellcode:

    for(int i = 1;i<ItemList->Count;i++) { ListBox1->Items->Add(ItemList->Strings[i].c_str()); }
    
    1. du mußt beachten, daß der Zähler immer bei 0 anfängt, sonst fehlt dir die erste Spalte
    2. warum machst du .c_str() an den String?


  • @Linnea

    Danke, hat geholfen.

    2) warum machst du .c_str() an den String?
    

    Habe ich so in einer Anleitung gefunden.

    Thx@all


Anmelden zum Antworten