Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > InterBase
InterBase Forum d'entraide sur le SGBD InterBase de Codegear. Avant de poster -> F.A.Q Interbase, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2007, 13h01   #1
Membre du Club
 
Inscription : mars 2006
Messages : 69
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 69
Points : 41
Points : 41
Par défaut [Interbase 4.0-C#] Problème interconnexion

Salut,

Je voudrais savoir s'il existe une façon plus ou moins digne de confiance pour pouvoir interconnecter une banque de données Interbase (version 4.0) avec un programme écrit sous C# .NET 2005.

Tous les différents éléments de connexion que j'ai déjà essayés, par exemple, EasySoft Interbase (ODBC Origine de données), IBProvider (OleDB) et Borland Data Provider-BDP (ADO.NET) finissent par me donner le message d'erreur suivant:

"unsupported on-disk structure for file e:\mibdd.gdb; found 2048 support 12" ("Structure sur le disque pas supportée pour le fichier e:\mibdd; trouvé 2048 support 12")

En plus, en utilisant quelques outils pour vérifier la structure interne de la banque de données réferée, parmi lesquelles je peux mentionner IBSurgeon, on reçoit la remarque que "It seems that file is not valid database or header page is corrupted. Please enter page size manually" (Il semble que le fichier n'est pas une banque de données valide ou que l'en-tête est corrompu).

A votre avis, que peut-il se passer? Problème d'incompatibilité entre Interbase 4.0 et les système d’exploitation Windows actuels (XP, Vista)?

Merci d'avance.
Iván Y. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2007, 13h45   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Il faudrait commencer par établir un diagnostic avec les outils qui ont été fournis avec cette version d'IB.

En effet, s'agissant d'une version plutôt ancienne, des différences sont certainement intervenues sur la structure interne du GDB, et les outils récents n'en tiennent pas nécessairement compte (pb d'ODS par ex.)

cf: http://dn.codegear.com/article/25497
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2007, 10h29   #3
Membre du Club
 
Inscription : mars 2006
Messages : 69
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 69
Points : 41
Points : 41
Merci de la réponse,

Le problème de sauver la saute de versions serait résolu, mais je vois encore un handicap, et c'est sa manque de dynamisme, c'est-à-dire, on doit, d'une certaine façon, geler l'état de la banque de données pour lui faire le backup, la transmettre du serveur vers le client et enfin le restaurer au client pour faire la "query".

Mais si je voudrais faire une opération d' "insert" ou "delete", je devrais, en plus, faire un backup à la machine locale et après envoyer la banque de données vers la machine serveuse, où la restauration de la banque devrait avoir lieu.

Par exemple, je connais quelques produits commerciaux, tels que le client BDE Administrator 5.01 (pour Interbase 4.0), lesquels, installés à la machine locale, peuvent jeter une consultation á la machine remote (IB 4.0). Ma question serait alors savoir si je pourrais jeter la "query" à une DLL de ce produit ou de quelqu'un de similaire pour oculter les difficultés de l'opération et oublier de la commande GBAK.

Merci d'avance.
Iván Y. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2007, 18h25   #4
Membre du Club
 
Inscription : mars 2006
Messages : 69
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 69
Points : 41
Points : 41
Par défaut Accès réussi, nouveau problème

La solution au problème d'accès consistait à installer la libraire gds32.dll correspondant à la version 4.0 du serveur InterBase 4.0. Tous les différents "connectors" (ADO.NET, OleDB, ODBC .NET) que j'avais déjà essayés depuis mon code C# fonctionnent bien maintenant!

Avec ça, j'ai réussi à accéder la banque de données, mais une nouvelle erreur est là. Je pense qu'il ne sera pas si difficile à effacer, mais je dois savoir comment lui faire face.

L'erreur est la suivante:
"[Interbase]Dynamic SQL Error; SQL Error Code=-901, feauture is not supported"

Quelle est la "feature" pas présente? Quelques idées?

Merci à nouveau.
Iván Y. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2007, 14h48   #5
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Il n'y a guère que toi qui puisses répondre à cette question....

Ce message vient sur quelle opération ?
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2007, 15h01   #6
Membre du Club
 
Inscription : mars 2006
Messages : 69
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 69
Points : 41
Points : 41
L'erreur apparaît après avoir fait un simple:

"SELECT * FROM maTable"

Une fois que la connexion ait été établie correctement.
Iván Y. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2007, 16h02   #7
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Je me doute que tu sollicites le serveur pour obtenir cette erreur, mais quel est le contexte ?
- dans ton appli ?
- outil tiers ?
- outil "natif" interbase ?
- autre ?
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2007, 09h53   #8
Membre du Club
 
Inscription : mars 2006
Messages : 69
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 69
Points : 41
Points : 41
Plus ou moins, le contexte est celui que j'avais déjà mentionné.

Depuis un code C#, j'utilise quelques "ponts" pour me connecter à la banque de données InterBase 4.0. Les trois alternatives que j'ai déjà testées sont:
- ODBC (ODBC .NET).
- OleDB (IBProvider).
- ADO .NET (BDP - Borland Data Provider).

En principe, en utilisant la libraire gds32.dll, en version 4.0, et en ajoutant certaines clés au Windows Registry (seulement dans le premier cas), j'ai réussi à accéder l'Interbase, mon problème maintenant c'est savoir comment faire correctement une query.

L'accès est tout simple, il consiste seulement à ouvrir la connexion, faire une SELECT et fermer la connexion, mais je ne obtiens que des erreurs similaires au suivant avec n'importe quel pont j'emploie:

Citation:
ERROR [40001][EasySoft][Interbase]Dynamic SQL Error; SQL Error Code=-901, feature is not supported
Le code utilisé dans le cas de l'ODBC:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// ODBC .NET    
USING Microsoft.DATA.Odbc;    
 
// ODBC            
OdbcConnection connexionOdbc = NULL;    
 
#region ODBC    
        private void btnODBCOuvrir_Click(object sender, EventArgs e)    
        {    
            connexionOdbc = new OdbcConnection("DSN=Interbase");    
 
            #region Ouvrir la connexion    
            try {    
                connexionOdbc.Open();    
            } catch (Exception exc){    
                MessageBox.SHOW(exc.Message);    
            }    
            #endregion               
        }    
 
        private void btnODBCQuery_Click(object sender, EventArgs e)    
        {                 
            #region Commade query    
            try    
            {    
                OdbcDataReader dataReaderOdbc = NULL;    
                OdbcCommand commandeOdbc = new OdbcCommand("SELECT * FROM maTable", connexionOdbc);    
                dataReaderOdbc = commandeOdbc.ExecuteReader();    
                while (dataReaderOdbc.READ())    
                {    
                    MessageBox.SHOW ("Colonne 1... " + dataReaderOdbc[0].ToString() + " - Colonne 2... " + dataReaderOdbc[1].ToString() + "\n";    
                }    
            }    
            catch (Exception exc)    
            {    
                MessageBox.SHOW(exc.Message);    
            }    
            #endregion                 
        }    
 
        private void btnODBCFermer_Click(object sender, EventArgs e)    
        {    
            #region Fermeture    
            try    
            {    
                connexionOdbc.Close();    
            }    
            catch (Exception exc)    
            {                 
                MessageBox.SHOW(exc.Message);    
            }    
            #endregion    
        }    
#endregion
Iván Y. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2007, 13h51   #9
Membre du Club
 
Inscription : mars 2006
Messages : 69
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 69
Points : 41
Points : 41
Finalement, j'ai connecté ma banque de données IB 4.0 et mon programme C#.

La solution a consisté à ajouter le SQLDialect 1 (versions 2 et 3 supportées seulement par versions supérieurs d'Interbase) pour le driver ODBC .NET, et l'instruction auto_commit=true (pour éviter le message "Feature not supported") pour le IBProvider.

Avec ça, on peut faire fonctionner les SELECTs, INSERTs, UPDATEs et DELETEs.

Merci beaucoup de votre aide et le temps que vous avez dédié à lire le problème, à la fin résolu.
Iván Y. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h37.


 
 
 
 
Partenaires

Hébergement Web