gestartetes Prog zeigt übergeben Parameter nicht an
-
Hallo,
das eine Teilprogramm ist in VB und das Andere in C++ mit dem C++ Builder programmiert.
Vom VB-Programm aus wird das Andere gestartet und entsprechend ein Parameter mit übergeben.
Anhand dieses Parameters zeigt das C++ Prog Daten in DBEdit-Feldern an, die verändert werden können. Mit "Speichern" oder "Abbruch" wird das C++ Prog entsprechend beendet und der Anwender arbeitet in dem VB Projekt weiter.Wird das C++ Prog nun vom C++ Builder, Kommandozeile oder von einem anderen C++ Prog aus gestartet, so übernimmt er die mitgegebenen Paramter und arbeitet Ordnungsgemäß.
Von VB aus gestartet werden die Parameter mit übergeben und verarbeitet(bereits geprüft), aber nicht angezeigt. Auch sind die DBEditfelder nicht mehr editierbar.
Weiß jemand weiter?
Da das VB Prog von einem Bekannten entwickelt wird, dauern eventuell Antworten auf Fragen von Euch, da ich jene erst weiter leiten muss. Ich habe seinen Quelltext nicht.Gruß
Biker78
-
Hallo
und ohne Quelltext läßt sich dazu aber nichts sagen. Das ist (laut deinen Aussagen) kein Problem der Parameterübergabe, sondern der internen Programmlogik und/oder des VB-Programms. Schreibt eine Loggingfunktion, die den Ablauf und die Kenndaten des Programms in eine Datei schreibt. Dann könnt ihr sehen, wie sich das Programm beim Aufruf duch VB verhält.
bis bald
akari
-
void __fastcall TForm::FormShow(TObject *Sender) { //Parameter testen TLocateOptions tmpLO; if((ParamStr(1) == "")||(ParamStr(1) == "0")) { //kein Parameter ShowMessage("No ID delivered!"); Application->Terminate(); return; } else { try { ParamStr(1).ToInt(); } catch(...) { //Parameter <> Integer ShowMessage("ID has to be an Integer!"); Application->Terminate(); return; } } //Parameter uebergeben ID = ParamStr(1).ToIntDef(0); // ShowMessage(AnsiString(ID)); DataModule1->ADODSSLAErfassung->Active = false; DataModule1->ADODSSLAErfassung->Parameters->ParamByName("ID")->Value = ID; DataModule1->ADODSSLAErfassung->Active = true; //ShowMessages fuer Fehlerdiagnose auskommentieren // ShowMessage("Param = " + AnsiString(ID)); // ShowMessage("ADODSSLAErfassung->FieldByName(\"ID\")->AsString = " + DataModule1->ADODSSLAErfassung->FieldByName("ID")->AsString); if (DataModule1->ADODSSLAErfassung->RecordCount < 1 ) { index = 1; DataModule1->ADODSSLAErfassung->Append(); //neuer Eintrag DataModule1->ADODSSLAErfassung->FieldByName("ID")->AsInteger = ID; // ShowMessage("Append mit TitelID = " + AnsiString(ID)); //Felder vorbelegen DataModule1->ADODSSLAErfassung->FieldByName("Tag")->Value = "1"; DataModule1->ADODSSLAErfassung->FieldByName("TageSeitWorkAble")->Value = 0; DataModule1->ADODSSLAErfassung->FieldByName("Description")->Value = "NULL"; DataModule1->ADODSSLAErfassung->FieldByName("Aktiv")->Value = 0; } //endif }
Das war das kleine C++ Prog und das ist eigentlich auch schon alles, was es können muss. Ich sehe die Probleme nicht bei diesen paar Zeilen. Was meint Ihr?
-
Als Ergänzung muss ich noch sagen, die DBEdit-Felder haben als "DataSource" das DataModule1->DSSLAErfassung und dann als "DataField" das dazu gehörenden Feld in der Datenbank, z.B. ID über den ObjektInspektor zugewiesen bekommen.
Gruß
Biker78
-
Hallo,
habe dieses Programm abgewandelt und die Daten aus den DataSources ausgelesen und in normale EditFelder geschrieben etc.Habe festgestellt, wenn ich ein zweites Formular öffne und dort DBEditFelder einfüge, die auch auf die oben verwendeten DataSources zugreifen, die Infos hier anzeigen.
Setze ich sie wieder in das Hauptformular -> nichts Wieso?Gruß
Biker78