MySQL Connection Verwenden oder Vererbung

CruzWoman

Grünschnabel
Hallo,

ich habe mal wieder ein Problem. Hab schon einiges probiert aber komme nicht klar damit.

Und zwar verbinde ich mich mit meinem MySQL-Server und möchte nun Daten aus meinem Form dort eintragen. Die Verbindung mit dem Server öffne ich in meiner main() Methode (funktioniert auch) und in der Form1.h möchte ich jetzt Daten in die Datenbank hineinschreiben. Dabei muss ich die Verbindung (conn2) angeben, aber Form1.h kennt meine Verbindung nicht, da sie ja in der main() geöffnet wird. Wir löst man so etwas? Eine Projekt.h gibt es ja nicht zum inkludieren. Die Datenbankverbindung soll bei Programmstart geöffnet werden, deshalb mache ich dies in der main() in Projekt.cpp, aber Daten reinschreiben möchte ich wenn der Speicherbutton gedrückt wird, also in der Form1.h... Kann man so etwas mit globalen Variablen machen? Oder irgendwie mit vererben? Oder ganz anders?

Folgendes habe ich bisher:

Code:
//Projekt.cpp
int main(array<System::String ^> ^args)
{
	// Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
	Application::EnableVisualStyles();
	Application::SetCompatibleTextRenderingDefault(false); 
	
	MySqlConnection^ conn2;
	try
	{
		String^ dbhost2 = "localhost";
		String^ dbuser2 = "dbname";
		String^ dbpass2 = "dbpasswort";
		String^ dbdatabase2 = "mydb";
		String^ conn2Str = String::Format("server={0};user id={1};password={2}; database={3}; pooling=false;",dbhost2, dbuser2, dbpass2, dbdatabase2);
		// Create a MySql Connection
		conn2 = gcnew MySqlConnection(conn2Str);
		conn2->Open();
		MessageBox::Show("Verbindung zum localhost MySQL Server erfolgreich!");
	}
	catch (...)
	{
		MessageBox::Show("Verbindung zum localhost MySQL Server fehlgeschlagen!");
	}

	// Hauptfenster erstellen und ausführen
	Application::Run(gcnew Form1());
	return 0;
}


//Form1.h
private: System::Void button9_Click(System::Object^  sender, System::EventArgs^  e) {
			 try
			 {
				 String^ SQL = "INSERT INTO Patient_has_Betreuungskraft (Patient_Codenr, Betreuungskraft_Betreuungsid) VALUES ("+this->textBox35->Text+","+this->textBox6->Text+")";
				 MySqlCommand^ cmd = gcnew MySqlCommand(SQL,conn2); // ==> Fehler: conn2: nichtdeklarierter Bezeichner
				 cmd->ExecuteNonQuery();
			 }
			 catch (MySql::Data::MySqlClient::MySqlException^ ex)
			 {
				 MessageBox::Show(ex->ToString());
			 }
		 }

Kann mir jemand weiterhelfen, wie man in Windows Forms so etwas macht? Ist meine erste Windows Forms Anwendung und komme damit irgendwie nicht klar.
Vielen Dank schon mal.
Viele Grüße
 

CruzWoman

Grünschnabel
Hab grade eine Lösung gefunden. Ich habe jetzt meinen ganzen try catch Block in die Form1.h eingefügt in:
Code:
public:Form1(void)
{
.....

try
	{
		String^ dbhost2 = "localhost";
		String^ dbuser2 = "dbname";
		String^ dbpass2 = "dbpasswort";
		String^ dbdatabase2 = "mydb";
		String^ conn2Str = String::Format("server={0};user id={1};password={2}; database={3}; pooling=false;",dbhost2, dbuser2, dbpass2, dbdatabase2);
		// Create a MySql Connection
		conn2 = gcnew MySqlConnection(conn2Str);
		conn2->Open();
		MessageBox::Show("Verbindung zum localhost MySQL Server erfolgreich!");
	}
	catch (...)
	{
		MessageBox::Show("Verbindung zum localhost MySQL Server fehlgeschlagen!");
	}

}

private: MySqlConnection^ conn2;

Jetzt klappt es.
 

Steiner_B

Erfahrenes Mitglied
Du kannst dir auch einfach einen Konstruktor der Form
C++:
public:
   Form1(MysqlConnection _conn);

schreiben und dir die Connection beim erstellen der Form aus der Main übergeben.
 
Zuletzt bearbeitet von einem Moderator:

tequila slammer

Erfahrenes Mitglied
alternativ zu Steiner_B seiner Lösung ginge es auch mit einer Propertie, falls du die Connection nicht für die ganze Form benötigst.