Announcement

Collapse
No announcement yet.

Ein Problem mit einem OleDBCommmandBuilder

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ein Problem mit einem OleDBCommmandBuilder

    Hallo,

    nach dem ich dies schon fast im Schlaf immer wieder gemacht habe, habe ich doch plötzlich ein Problem:
    " Dynamische SQL-Generierung wird für einen SelectCommand, der keine Basistabelleninformationen zurückgibt, nicht unterstützt. "

    Der Code welcher die Tabelle erzeugt sieht so aus:
    Code:
     ADOX::CatalogClass ^cat = gcnew ADOX::CatalogClass();
    
    				  	System::Data::OleDb::OleDbConnection ^co= gcnew System::Data::OleDb::OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" +
    				"Data Source="+Application::StartupPath+"\\DVDCal.mdb;" +
    				   "Jet OLEDB:Engine Type=5");
    
    
    				  System::IO::FileInfo ^f =gcnew System::IO::FileInfo(Application::StartupPath+"\\DVDCal.mdb");
    					  if(!f->Exists) {
    			cat->Create("Provider=Microsoft.Jet.OLEDB.4.0;" +
    				"Data Source="+Application::StartupPath+"\\DVDCal.mdb;" +
    				   "Jet OLEDB:Engine Type=5");
    		
    
    			System::Data::OleDb::OleDbCommand ^com=gcnew System::Data::OleDb::OleDbCommand("Create Table DVDs (Titel Memo NOT NULL PRIMARY KEY, Darsteller Memo,Regie Text(255), Autor Text(255), Quelle Text(255), Bemerkungen Memo, ErscheinungsjahrDVD_Video Text(255), Nummer Integer, Besorgungsdatum Text(255), DatumKopierenEmpfohlen Text(255), MarkeMedium Text(255), Problematisch Bit )", co);
    			System::Data::OleDb::OleDbCommand ^com2=gcnew System::Data::OleDb::OleDbCommand("Create INDEX ixPrim ON DVDs (Titel ASC)", co);
    System::Data::OleDb::OleDbCommand ^com3=gcnew System::Data::OleDb::OleDbCommand("Create INDEX ixSearchDate ON DVDs (Besorgungsdatum ASC, Titel ASC, DatumKopierenEmpfohlen ASC)", co);
    //System::Data::OleDb::OleDbCommand ^com4=gcnew System::Data::OleDb::OleDbCommand("Create UNIQUE INDEX ixSearch2 ON DVDs (ErscheinungsjahrDVD_Video ASC)", co);
    			co->Open();
    			com->ExecuteNonQuery();
    ...
    usw.
    Dann der Code wo der DataAdapter erzeugt wird und die Befehle, wo es schief geht:
    Code:
    //System::Data::OleDb::OleDbCommand ^selectcom=gcnew System::Data::OleDb::OleDbCommand("SELECT Titel, Darsteller, Regie, Autor, Quelle, Bemerkungen, ErscheinungsjahrDVD_Video, Nummer, Besorgungsdatum, DatumKopierenEmpfohlen, MarkeMedium, Problematisch", co);
    						  DVDsTableAdapter2 = gcnew System::Data::OleDb::OleDbDataAdapter("SELECT Titel, Darsteller, Regie, Autor, Quelle, Bemerkungen, ErscheinungsjahrDVD_Video, Nummer, Besorgungsdatum, DatumKopierenEmpfohlen, MarkeMedium, Problematisch", co);
    						  System::Data::OleDb::OleDbCommandBuilder ^cbb = gcnew System::Data::OleDb::OleDbCommandBuilder(DVDsTableAdapter2); 
    						  DVDsTableAdapter2->UpdateCommand=cbb->GetUpdateCommand();
    						  DVDsTableAdapter2->InsertCommand=cbb->GetInsertCommand();
    						  DVDsTableAdapter2->DeleteCommand=cbb->GetDeleteCommand();
    
    						  //this->DVDsTableAdapter->Fill(this->DVDCalDataSet->DVDs);
    
    					//  }
    						  DVDsTableAdapter2->Fill(this->DVDCalDataSet->DVDs);
    Was da nicht geht ist mir ein Rätsel, oder ich übersehe es heute einfach immer! :-)

    Danke

  • #2
    Bei deinen OleDbCommand sowie bei OleDbDataAdapter fehlt in deinem Select Statement die FROM Klausel.

    Comment


    • #3
      mmmmmh! Jaa. Danke! Dachte es muss so etwas blödes kleines sein das ich einfach nicht mehr gesehen habe; nach dem Arbeitstag zu Hause noch programmieren, war glaub etwas müde :-D Danke!

      Habe gerade versucht; es ging dennoch nicht! Erst als ich die Nummer als Primary Key festlegte gings. Muss demfall Access eine Nummer als Primärschlüssel haben?
      Zuletzt editiert von C.M.Obrecht; 29.12.2010, 23:25.

      Comment


      • #4
        Hallo,

        bei Verwendung der von der abstracten Klasse "DbCommandBuilder" abgeleiteten Klassen (z.B."OleDbCommandBuilder") muß ein primärschlüssel (oder ein eindeutige Spalte) vorhanden sein.

        Siehe dazu:

        SelectCommand muss also mindestens einen Primärschlüssel oder eine eindeutige Spalte zurückgeben. Wenn dies nicht der Fall ist, wird eine InvalidOperationException-Ausnahme generiert, aber nicht die Befehle.
        Nachzulesen bei:

        http://msdn.microsoft.com/de-de/libr...VS.100%29.aspx

        Viele Grüße
        Matthias

        Comment


        • #5
          Hallo!

          Vielen Dank; das wusste ich schon und hatte auch einen Primärschlüssel.
          Das Problem war irgendwie (obwohl das unter Acess sonst auch geht), dass die Schlüsselspalte einen String war; sobald ich eine andere, numerische Spalte als Primärschlüssel festlegte ging's. Seither funktioniert alles bestens.

          Comment

          Working...
          X