Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1656 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Recuperer valeur textbox pour connexion à une base Oracle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Recuperer valeur textbox pour connexion à une base Oracle

n°1960160
Monostone
Posté le 25-01-2010 à 10:17:18  profilanswer
 

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:///c:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
Syslog3Bis
    Assembly Version: 1.0.3677.18457
    Win32 Version:  
    CodeBase: file:///c:/Documents%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:///C:/WINDOWS/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:///C:/WINDOWS/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:///C:/WINDOWS/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:///C:/WINDOWS/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:///C:/WINDOWS/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:///C:/WINDOWS/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.

mood
Publicité
Posté le 25-01-2010 à 10:17:18  profilanswer
 

n°1960168
Joel F
Real men use unique_ptr
Posté le 25-01-2010 à 10:55:22  profilanswer
 

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

n°1960175
Monostone
Posté le 25-01-2010 à 11:15:52  profilanswer
 

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.

n°1960180
Joel F
Real men use unique_ptr
Posté le 25-01-2010 à 11:27:44  profilanswer
 

pourquoi faire une globale aussi ?

n°1960181
Monostone
Posté le 25-01-2010 à 11:30:51  profilanswer
 

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.


Message édité par Monostone le 25-01-2010 à 14:39:57
n°1960190
Joel F
Real men use unique_ptr
Posté le 25-01-2010 à 12:38:24  profilanswer
 

t'as le droit de faire des variables locales aussi et de les passer à ta fonction ...
 
et on dit fichier source, pas script ...

n°1960219
Monostone
Posté le 25-01-2010 à 14:33:46  profilanswer
 

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.
 


Message édité par Monostone le 25-01-2010 à 14:40:00

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Recuperer valeur textbox pour connexion à une base Oracle

 

Sujets relatifs
Comment établir une connexion SSL depuis un pgm VB ?Récupérer un int en dehors de la fonction.
équivalent à un input type=file, pour récupérer le chemin d'un dossier[SHELL] Connexion base DB2 + lancement requête dans fichier .sql
upload: Comment récupérer tous les fichiers d'un rep clientrecuperer la taille d'un fichier distant
Scrip pour récupérer logginASP avec Oracle
Plus de sujets relatifs à : Recuperer valeur textbox pour connexion à une base Oracle


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR