Visual C++ : Verbindung mit SQL Datenbank herstellen und query starten...



  • .\new4.cpp(17) : error C2065: 'adp' : undeclared identifier
    .\new4.cpp(17) : error C2227: left of '->Fill' must point to class/struct/union/generic type
            type is ''unknown-type''
    .\new4.cpp(17) : error C2065: 'dsMain' : undeclared identifier
    .\new4.cpp(18) : error C2065: 'bndMain' : undeclared identifier
    .\new4.cpp(18) : error C2227: left of '->DataSource' must point to class/struct/union/generic type
            type is ''unknown-type''
    .\new4.cpp(18) : error C2065: 'dsMain' : undeclared identifier
    .\new4.cpp(19) : error C2065: 'bndMain' : undeclared identifier
    .\new4.cpp(19) : error C2227: left of '->DataMember' must point to class/struct/union/generic type
            type is ''unknown-type''
    .\new4.cpp(19) : error C2065: 'dsMain' : undeclared identifier
    .\new4.cpp(19) : error C2227: left of '->Tables' must point to class/struct/union/generic type
            type is ''unknown-type''
    .\new4.cpp(19) : error C2227: left of '->TableName' must point to class/struct/union/generic type
    .\new4.cpp(20) : error C2065: 'grdMain' : undeclared identifier
    .\new4.cpp(20) : error C2227: left of '->DataSource' must point to class/struct/union/generic type
            type is ''unknown-type''
    .\new4.cpp(20) : error C2065: 'bndMain' : undeclared identifier
    

    Was habe ich bloß angestellt?..... 😮
    ... hab per Zufall nen DataSet erstellt.... aber weiss nicht mehr wie...
    mit ner schönen erklärung wärst du mein Retter 😉



  • Na, mache es doch rückgängig. Funktioniert der Formeditor noch? Vllt neues Form bauen und dort testen.



  • so... bin jetzt so ->

    int main(array<System::String ^> ^args)
    {
    
        SqlConnection ^cnc = gcnew SqlClient::SqlConnection("Data Source=************+;Initial Catalog=dpf;User ID=*******;Password=*****"); 
        DataAdapter ^adp = gcnew SqlDataAdapter("SELECT * FROM ************", cnc); 
    
    	DataSet ^dsMain = gcnew DataSet;
    	BindingSource ^bndMain = gcnew BindingSource;
    	DataGridView ^grdMain = gcnew DataGridView;
    
    //	adp->Fill(dsMain); 
        bndMain->DataSource = dsMain; 
        bndMain->DataMember = dsMain->Tables[0]->TableName; 
        grdMain->DataSource = bndMain;
    

    weit....

    Fehler die jetzt auftauchen.... ->

    A first chance exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll
    A first chance exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll
    An unhandled exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll
    
    Additional information: Cannot find table 0.
    


  • Mit adp->Fill(dsMain); werden die Daten vom Server abgerufen und in das DataSet als Tabelle eingetragen. Das Dataset ist nach der Konstruktion leer, durch das Füllen entsteht dsMain->Tables[0]. Warum hast das auskommentiert? Gibt es Fehler? Ist das SQL fehlerhaft?



  • Spätestens wenn ich

    adp->Fill(dsMain);
    

    wieder zugänglich mache bekomme ich das hier ->

    A first chance exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
    


  • Dann kapsele es doch in einem try catch und analysiere das Fehlerobjekt. Möglicherweise ist das SQL fehlerhaft.



  • So... Fehler sind weg... aber die Daten laden nicht in der Grid....
    hier der Quelltext...

    #include "Form1.h"
    
    using namespace Clean;
    using namespace System; 
    using namespace System::Data; 
    using namespace System::Data::Common; 
    using namespace System::Data::SqlClient; 
    
    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
     //SetCompatibleTextRenderingDefault(true);
    	// Enabling Windows XP visual effects before any controls are created
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    
    	// Create the main window and run it
    
    	SqlConnection ^cnc = gcnew SqlClient::SqlConnection("Data Source=ne-sql-02[b]\[/b]sql02;Initial Catalog=DPF;User ID=*****;Password=*******"); 
        DataAdapter ^adp = gcnew SqlDataAdapter("SELECT CLID FROM [b]PCDOWN[/b].TE_DPF_ELISEP_INTERIM_TEST ", cnc);  
    	DataSet ^dataSet1 = gcnew DataSet;
    	BindingSource ^bndMain = gcnew BindingSource;
    	DataGridView ^grdMain = gcnew DataGridView;
    
        adp->Fill(dataSet1); 
    	bndMain->DataSource = dataSet1; 
        bndMain->DataMember = dataSet1->Tables[0]->TableName; 
        grdMain->DataSource = bndMain; 
    
    	Application::Run(gcnew Form1());
    
    	return 0;
    }
    


  • witte schrieb:

    Dann habe ich im Datagridview Spalten eingefügt und im DataPropertyName die entsprechenden Spaltennamen der DB-Tabelle eingetragen. Und er zeigt die Daten an.



  • Also... habe eben ein Select * auf die Tabelle gemacht... und er schien auch etwas zu verarbeiten... dauerte etwa 5min bis das Programm gestartet war... Ergebnis : 0 ... hab auch DataPropertyName richtig bennant... glaube ich zumindest...

    Hier einige Screenshots... vll findest du ja den Fehler 🙂

    Column1
    grdMain
    Form
    DataSet
    BindingSource



  • Ich habe jetzt nur 5 Sekunden drauf geschaut, aber muesste DataSource im bndMain nicht dsMain sein? Arbeitest Du mit 2 DataSets?



  • also, ich kann nur DataSet1 oder Form1 als DataSource eingeben...
    In der Tat heisst das 1 DataSet = dsMain aber iw erscheint auf der Form immernoch der name DataSet1 und in der DataSource von bndMain erschein eben nur DataSet1 als DataSet. Und ich arbeite nur mit einem DataSet
    😞

    Edit*: hab dsMain überall zu DataSet1 übergeschrieben... sollte ja eigentlich so auch gehen... Erfolg = nada....
    Scheinbar ist jetzt Imageshack down... argh... 😞



  • Nach dem "Erfolg" letztens war ich zuversichtlich, dass es jetzt klappen würde-.-
    aber anscheinend ist da doch noch irgendwo der Wurm drinn... 😞

    // CRAP.cpp : main project file.
    
    #include "stdafx.h"
    #include "Form1.h"
    
    using namespace CRAP;
    using namespace System;
    using namespace System::Data;
    using namespace System::Data::Common;
    using namespace System::Data::SqlClient;
    
    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
    // Enabling Windows XP visual effects before any controls are created
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    
    	SqlConnection ^cnc = gcnew SqlClient::SqlConnection("Data Source=ne-sql-02\\sql02;Initial Catalog=DPF;User ID=----------;Password=---------"); 
       DataSet ^dataSet1 = gcnew DataSet("dataSet1");
    	DataAdapter ^adp = gcnew SqlDataAdapter("SELECT CLID FROM PCDOWN.TE_DPF_ELISEP_INTERIM_TEST ", cnc);  
       adp->Fill(dataSet1);
       BindingSource ^bindingSource1 = gcnew BindingSource;
       bindingSource1->DataSource = dataSet1;
       bindingSource1->DataMember = dataSet1->Tables[0]->TableName;
       DataGridView ^dataGridView1 = gcnew DataGridView;
       dataGridView1->DataSource =  bindingSource1;
    
    	// Create the main window and run it
    	Application::Run(gcnew Form1());
    
    	return 0;
    }
    


  • Hi, warum legst Du noch ein DatagridView an?

    DataGridView ^dataGridView1 = gcnew DataGridView;
    

    Du musst doch das nehmen, welches Du mit dem Designer angelegt hast.



  • wie kündige ich das denn an? oder erkennt er das grid ohne weiteres`?
    Edit*: Bin gerade Zuhause und kann leider nicht testen^^ erst morgen früh wieder 😞



  • Wenn Du ein Grid auf das Form gepackt hast, muss es doch ein Member Deines Forms sein, dann kannst Du doch darauf zugreifen und die BindingSource zuweisen.



  • .\Clean.cpp(38) : error C2065: 'dataGridView1' : undeclared identifier
    

    Irgendwie muss ich dem doch sagen, dass er auf das DataGrid in Form1.h zugreifen soll, oder?... fehlt mir nen #include oder sowas in der Art??
    Ich verstehe doch richtig, dass wenn ich die "Tools" die ich benutzte in die Form ziehe (dataset/bindingsource/datagridview), diese im Form1.h erstellt werden. Also müsste ich im "Clean.cpp" meiner "main project file." iw eine Referenz bilden... wobei ich immer dachte, dass das

    #include "Form1.h"
    

    ausreicht...



  • Form1 ist keine statische Klasse, Du benötigst ein Objekt dieser Klasse. Dieses wird in Application::Run(gcnew Form1()); on-the-fly erzeugt, der Mainthread wird dort angehalten, bis kein Form mehr existiert und dann mit return 0; die Anwendung beendet. So wird's also nicht laufen.
    Warum packst Du den Code nicht in das OnLoad-Event von Form1?



  • mom mal testen 🙂



  • wOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOt 😃 😃 😃
    Es geht!!!!! 🙂 Vielen Dank^^
    Ich glaub ich muss dir mal nen Bier ausgeben, oder sowas in der Art^^

    (Bin noch nicht ganz fertig mit dem Programm aber schon fast am ende 🙂 hoffe ich kann auf deine Hilfe zählen "falls" noch was kommt xD)



  • und da bin ich wieder 🙂
    Folgendes:
    Ich soll nur eine bestimmte "CLID" aussuchen, also habe ich ->

    DataAdapter ^adp = gcnew SqlDataAdapter("SELECT CLID, SOURCEID, NAME, Street, ZIP, Country, Ship_to_location, Bill_to_Location FROM PCDOWN.TE_DPF_ELISEP_INTERIM_TEST WHERE CLID = '" [b]+ textBox1->Text +[/b] "'" , cnc);
    

    ...das hier gemacht. Klappt auch ganz gut nur 2 Sachen stören mich:
    1. % geht nicht... ka wieso der scheint darauf nicht zu reagieren (Hat sich erledigt :))

    2. Wie kann ich die Einträge in der Grid nach jedem "Search" leeren?


Anmelden zum Antworten