databasename - index



  • hallo leute,

    will folgendes machen:
    in einem treeview liste ich alle datenbanken samt tabellen auf mit

    TTreeNode *tn;
     TTreeNode *tn1;
     int a = 0, x = 0;
     list_dbs();
            Query1->Close();
            Query1->SQL->Clear();
            Query1->SQL->Add("Show Databases;");
            Query1->Open();
            tn1 = tvsource->Items->Add(NULL, "Databases");
    
        for (int i = 0;!Query1->Eof;Query1->Next())
         {
                tn = tvsource->Items->AddChild(tn1,   Query1->Fields->Fields[i]->AsString);
                Query2->Close();
                Query2->SQL->Clear();
                Query2->SQL->Add("Show tables from " + Query1->Fields->Fields[i]->AsString + ";");
                Query2->Open();
                for (int ii = 0;!Query2->Eof;Query2->Next())
                {
                 tvsource->Items->AddChild(tn, Query2->Fields->Fields[0]->AsString);
                }
         }
    

    Funktioniert alles wunderbar.
    Doch ich möchte nun auf eine Tabelle zugreifen und das create davon in einem Memo ausgeben. Jetzt haben die Tabelle, die nicht der ersten Datenbank zugehören den Index von der 1. Datenbank (also wenn ich die Datenbank MySql und Hallo habe und ich auf die Tabelle test von hallo zugreifen will, dann bekomme ich als Fehlermeldung, dass Hallo.test nicht existiert).
    Habe mit folgendem Code versucht, das ganze zu lösen:

    if(tvsource->Selected->Level == 2)
      {
       TTable *a = new TTable(this);
       Memo1->Clear();
       Query1->Close();
       Query1->SQL->Clear();
       Query1->SQL->Add("Show Create TABLE " + tvsource->Selected->Text + ";");
    
       Database1->Connected = false;
       a->TableName = tvsource->Selected->Text;
       a->DatabaseName = tvsource->Selected->Parent->Text;
    
       Database1->Connected = true;
       Query1->Open();
         while (!Query1->Eof)
         {
            Memo1->Lines->Add(Query1->Fields->Fields[1]->AsString + "\n");
            Query1->Next();
         }
       }
    

    Was mache ich bitte falsch?

    lg hagbard



  • uuups, änderte mal das:

    TTable *a = new TTable(this);
       a->TableName = tvsource->Selected->Text;
       a->DatabaseName = tvsource->Selected->Parent->Text;
       Memo1->Clear();
       Query1->Close();
       Query1->SQL->Clear();
       Query1->SQL->Add("Show Create TABLE " + a->TableName + ";");
    

    weil es muss dann natürlich auch a->TableName verwendet werden. Trotzdem funktioniert es noch nicht 😢

    lg hagbard



  • schönen guten morgen,

    das problem scheint zu sein, dass ich den ganzen objekten schon die erste datenbank unter databasename zuzuweisen. wie kann ich in dem code die richtige datenbank zuweisen? die zu den tabellen gehört?

    wäre euch wirklich total dankbar!

    lg hagbard


Anmelden zum Antworten