Recuperer valeur textbox pour connexion à une base Oracle - C++ - Programmation
Marsh Posté le 25-01-2010 à 10:55:22
les cast façon :
(char*)(void*)Marshal::StringToHGlobalAnsi(textBox1->Text);
c'ets pas du tout comme ça que tu résoudras ton problème.
Je subodore que tu as mis ça car le compilo couinait sur un type mismatch. A vu de nez, il faut certainement faire une COPIE de la chaine dans un char* allouer spécialement et non pas transtyper comme un goret.
Enleve les casts et dis nous ce que dis le compilo
Marsh Posté le 25-01-2010 à 11:15:52
Alors, là, j'ai enlevé les convertions.
J'ai donc mis :
System::String^ user;
System::String^ password;
System::String^ bdd;
user = this->textBox1->Text;
password = this->textBox2->Text;
bdd = this->textBox3->Text;
Le souci, c'est que je ne peut pas déclarer en Global les System::String^ .
Si j'essaye, voila l'erreur que j'ai :
error C3145: 'user' : global or static variable may not have managed type 'System::String ^'
may not declare a global or static variable, or a member of a native type that refers to objects in the gc heap
Autrement, le programme compile vu que dukou je ne fait pas appel a ma fonction.
Si je fait appel a user à partir d'un autre script, évidement j'ai l'erreur suivante :
error C2065: 'user' : undeclared identifier
Puisque je ne peut pas déclarer user en global.
Marsh Posté le 25-01-2010 à 11:30:51
Car mes textbox sont dans mon fichier source "ouvertureSession".
Mais j'en est besoin dans mon fichier source de connexion afin de pouvoir établir ma connection.
J'utilise ocilib et voici la ligne de code ou je doit faire appel a user, password et bdd :
cn = OCI_ConnectionCreate(bdd, user, password, OCI_SESSION_DEFAULT);
Lorsque je met les informations de bdd, user et password en dur, la connection s'effectue sans problèmes.
Marsh Posté le 25-01-2010 à 12:38:24
t'as le droit de faire des variables locales aussi et de les passer à ta fonction ...
et on dit fichier source, pas script ...
Marsh Posté le 25-01-2010 à 14:33:46
Désolé pour mon vocabulaire, je débute, et désolé aussi pour le temps de réponse, j'était en pause déjeuné.
Je ne vois pas trop comment faire cela.
Actuellement, je déclare mes variables dans mon bouton "OK" (d'OuvertureSession).
Il m'est impossible de déclarer mes variables à l'extérieur de toute fonction ou de tout bloc d'instruction.
Lorsque j'essaye de faire cela voici l'erreur que je rencontre :
rror C3145: 'user' : global or static variable may not have managed type 'System::String ^'
may not declare a global or static variable, or a member of a native type that refers to objects in the gc heap
Je vais continuer tout de même à chercher comment réaliser ca.
Marsh Posté le 25-01-2010 à 10:17:18
Bonjour,
Je developpe actuellement un programme ayant pour but de ce connecter à une base de donnée Oracle et de dépiler des informations.
Cette étape fonctionne correctement.
Mon problème ce situe au niveau de la connexion.
Lorsque je met les informations de connection (bdd, user et password) en dur, je n'est aucun problèmes.
Mais lorsque je veut me servir de textbox afin que l'utilisateur puisse saisir sa bdd, son user et son password, mon programme ne ce connect plus.
Voici les lignes de code que j'ai mis afin d'établir cette connexion :
using namespace Runtime::InteropServices;
user = (char*)(void*)Marshal::StringToHGlobalAnsi(textBox1->Text);
password = (char*)(void*)Marshal::StringToHGlobalAnsi(textBox2->Text);
bdd = (char*)(void*)Marshal::StringToHGlobalAnsi(textBox3->Text);
J'utilise une convertion car les valeurs des textbox sont en System::String^, alors que mon code issu d'ocilib demande des valeurs en Char.
Avec ce code, mon programme compile.
Je peut saisir mes informations dans les textbox, mais lorsque je veut lancer la connection (en mode debug), une erreur s'affiche :
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at OCI_ErrorGetOCICode(OCI_Error* )
at err_handler(OCI_Error* err) in c:\documents and settings\bchulliat\bureau\syslog3_12_01_10bis\syslog3bis\outils_bdd.h:line 29
at OCI_ConnectionCreate(SByte* , SByte* , SByte* , UInt32 )
at Connection(basic_string<char\,std::char_traits<char>\,std::allocator<char> >* message) in c:\documents and settings\bchulliat\bureau\syslog3_12_01_10bis\syslog3bis\outils_bdd.h:line 65
at Syslog3Bis.Form1.button1_Click(Object sender, EventArgs e) in c:\documents and settings\bchulliat\bureau\syslog3_12_01_10bis\syslog3bis\form1.h:line 267
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3603 (GDR.050727-3600)
CodeBase: file:///cWINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
Syslog3Bis
Assembly Version: 1.0.3677.18457
Win32 Version:
CodeBase: file:///cDocuments%20and%20Settings/bchulliat/Bureau/Syslog3_12_01_10bis/debug/Syslog3Bis.exe
----------------------------------------
msvcm80d
Assembly Version: 8.0.50608.0
Win32 Version: 8.00.50727.42
CodeBase: file:///CWINDOWS/WinSxS/x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c/msvcm80d.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///CWINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///CWINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///CWINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Configuration
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3053 (netfxsp.050727-3000)
CodeBase: file:///CWINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.3082 (QFE.050727-3000)
CodeBase: file:///CWINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
Je ne sait pas trop comment m'y prendre afin de corriger cette erreur.
Je pense que cela vien de fait que je converti mon System::String^ en char* alors qu'il faudrai le convertir en char[].
Mais....je ne trouve pas comment faire.
Merci d'avance pour votre aide.