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



  • 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?



  • KorredC++ schrieb:

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

    In dem man in die Doku schaut und feststellt, dass DataSet eine Clear()-Methode besitzt.



  • xD, du sagst es 😉
    ... Programm fertig, aber...(letzte Sache) wenn ich es auf nem anderen Pc starte gibts nen Fehler... ich vermute mal es liegt an .NET Framework da es auf dem anderen Pc nicht drauf ist... liege ich damit richtig?



  • Du könntest es noch abrunden und ein Setup-Projekt zu der Solution packen und das Produkt als Installerpaket ausliefern.



  • Das klingt ziemlich gut 😉 Höre das zum ersten Mal aber bin bereit das zu machen
    Hast du irgendeine genaue Anleitung für mich?

    *Edit: So Problem gelöst... -.- Programm wollte nicht starten da kein .NET Framwork 3.5 installiert war auf dem anderen PC... iw lästig.. naja hautpsache es geht!



  • Hallo... Nachdem Du Dein Problem gelöst hast, wärest Du so nett, nochmal Deinen kompletten (funktionierenden) Code hier zu posten?

    Ich habe das alles hier verfolgt, aber bei mir werden auch die Daten nicht ins Grid geladen. Das Grid bekommt zwar die richtige Anzahl Zeilen und Spalten (wie die geladene Tabelle) aber alles ist leer...

    Weitere Frage: Sollten Änderungen die ich im Grid mache direkt in die Datenbank geschrieben werden oder ist dafür ein zusätzlicher Schritt nötig?



  • ...
    SqlConnection ^cnc = gcnew SqlClient::SqlConnection("Data Source=buero;Initial Catalog=Haussteuerung;User ID=test;Password=test");
    DataSet ^dsMain = gcnew DataSet;
    DataAdapter ^adp = gcnew SqlDataAdapter("SELECT BoardId, BoardName FROM IO_Karten", cnc);
    adp->Fill(dsMain);
    BindingSource ^bndMain = gcnew BindingSource;
    bndMain->DataSource = dsMain;
    bndMain->DataMember = dsMain->Tables[0]->TableName;
    grdMain->DataSource = bndMain;

    ...

    Wird ohne Fehler compiliert und ausgeführt. Aber leider sind im Grid nur leere Felder... (immerhin stimmt die Anzahl der Rows)



  • steysi schrieb:

    ...
    Wird ohne Fehler compiliert und ausgeführt. Aber leider sind im Grid nur leere Felder... (immerhin stimmt die Anzahl der Rows)

    Der wird nicht wissen welche Spalten er im Grid darstellen soll. Hast Du mal alle Spalten aus dem Grid entfernt, damit er sie selber füllt? Wenn Du neben dem Grid eine Textbox platzierst und sie an die BoardName-Spalte bindest müsste auch der jeweilige Wert angezeigt werden wenn Du in die leeren Zeilen im Grid klickst.



  • Also wenn ich die Definition der Tabellen und Spalten aus dem Formeditor 'rauslösche, sehe ich als Ergebnis im Grid nur eine leere graue Fläche.
    Habe ich Dich richtig verstanden, dass im DataGridView und im DataSet keine Informationen zur Tabelle oder zu den Spalten sein sollen??



  • Habe jetzt die Änderungen rückgängig gemacht und oh Wunder: es geht jetzt!!!

    Aber: Wenn ich Felder im Grid ändere hat dies keine Auswirkuingen auf die Datenbank. Wie kann ich die Änderungen mit der Datenbank abgleichen bzw. zurückschreiben?

    Muss ich ein Event z.B. RowLeave auswerten und dann per Update Anweisung diese Daten in die DB schreiben oder geht es auch einfacher?

    Danke für Deine Unterstützung!!!



  • Das Änderungsprotokoll befindet sich im DataSet DataSet ^dsMain. Am Besten ist es wohl dass Du einen SqlCommandBuilder erzeugst, den DataAdapter dem CommandBuilder-Konstruktor übergibst und dann über den Adapter mit Update() die Änderungen zurückschreibst.
    http://msdn.microsoft.com/de-de/library/tf579hcz.aspx



  • o.k. super. Werde ich mal probieren...


Anmelden zum Antworten