IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

InterBase Discussion :

[Interbase 4.0-C#] Problème interconnexion


Sujet :

InterBase

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 76
    Points : 74
    Points
    74
    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.

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    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

  3. #3
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 76
    Points : 74
    Points
    74
    Par défaut
    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.

  4. #4
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 76
    Points : 74
    Points
    74
    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.

  5. #5
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    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

  6. #6
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 76
    Points : 74
    Points
    74
    Par défaut
    L'erreur apparaît après avoir fait un simple:

    "SELECT * FROM maTable"

    Une fois que la connexion ait été établie correctement.

  7. #7
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    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

  8. #8
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 76
    Points : 74
    Points
    74
    Par défaut
    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:

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  9. #9
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 76
    Points : 74
    Points
    74
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 25/05/2007, 15h21
  2. [INTERBASE][UPDATE SET WHERE] problème de requete
    Par exclusif dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/03/2006, 21h10
  3. [Interbase 7] Problème d'insertion de données
    Par Tuscelan dans le forum InterBase
    Réponses: 12
    Dernier message: 19/11/2003, 22h58
  4. Réponses: 11
    Dernier message: 13/10/2003, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo