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

 C Discussion :

création d'une table de hachage


Sujet :

C

  1. #1
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut création d'une table de hachage
    bonjour à tous,
    j'ai crée une fonction qui remplit une table de hachage et qui retourne une table de hachage rempli.
    le probleme c'est qu'il maffiche une erreur :`LireFichierEntree' declared as function returning an array|
    je vois pas la cause du probleme
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    TableHachageMot LireFichierEntree(char const *langue, TableHachageMot DblTableHash[], int *pNbLignes)
    {
    	int retour = -1;
    	FILE *fdesc = NULL;
    	if(pNbLignes != NULL)
    		*pNbLignes = 0;
    	fdesc = ouvrir_fichier_entree(langue);
    	if ( fdesc==NULL )
    	{
    		perror("fopen");
    	}
    	else
    	{
    		char* buff = NULL;
    		char* prec = NULL;
    		char* concat = NULL;
    		size_t tailleBuff = 0;
    		size_t taillePrec = 0;
    		size_t tailleConcat = 0;
    		int ancienneLigne = -1;
    		int ancienneColonne = -1;
    		int ligne = 0;
    		int colonne = -1;
    		ssize_t res;
     
    		printf("Lecture du fichier texte (prog: 1 point pour %d lignes)...\n", PROG_NBLIGNES);
    		while ( (res=get_word(fdesc, &buff, &tailleBuff, &ligne, &colonne))>0 )
    		{
    			if(ancienneLigne == ligne)
    			{
    				static char const separ[] = {SEPARATEUR, '\0'};
     
    				/* Mot sur la même ligne: Ajouter 2seq */
    				if(tailleConcat < 2*tailleBuff)
    				{
    					tailleConcat = 2*tailleBuff;
    					ReallocCharExit(&concat, tailleConcat);
    				}
    				assert(concat != NULL);
     
    				strcpyN(concat, tailleConcat, prec);
    				strcatN(concat, tailleConcat, separ);
    				strcatN(concat, tailleConcat, buff);
     
    				#if 0
    				AfficherEspaces(ancienneColonne);
    				puts(concat);
    				#endif
    				InsertionDoubleHashEx(DblTableHash, concat, ancienneLigne, ancienneColonne);
    			}
    			else
    			{
    				if(ligne%PROG_NBLIGNES==0)
    					putchar('.');
    			}
     
    			/* Mémorise l'ancien mot et son n° de ligne */
    			ancienneLigne = ligne;
    			ancienneColonne = colonne;
    			/* Pour de meilleures performances,
    			  on bosse en double buffer plutot que recopier à chaque fois.*/
    			if(taillePrec != tailleBuff)
    			{
    				taillePrec = tailleBuff;
    				ReallocCharExit(&prec, taillePrec);
    			}
    			assert(prec != NULL);
    			assert(taillePrec == tailleBuff);
    			SwapPtrChar(&prec, &buff);
    		}/*while*/
     
    		if(res < 0)
    			perror("get_word");
    		else
    		{
    			retour = 0; /* OK */
    			putchar('\n');
    			printf("Lu %d lignes.\n", ligne);
    			if(pNbLignes != NULL)
    				*pNbLignes = ligne;
    		}
     
    		/* Nettoyage */
    		free(concat), concat=NULL, tailleConcat=0;
    		free(prec), prec=NULL, taillePrec=0;
    		free(buff), buff=NULL, tailleBuff=0;
    		fclose(fdesc), fdesc=NULL;
    	}/*if fdesc*/
    	return DblTableHash;
    }
    Le jour est le père du labeur et la nuit est la mère des pensées.

  2. #2
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Tout simplement parce que la valeur retournée n'est pas celle attendu (TableHachageMot vs TableHachageMot[])

  3. #3
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par |PaRa-BoL Voir le message
    Tout simplement parce que la valeur retournée n'est pas celle attendu (TableHachageMot vs TableHachageMot[])
    MErci paRa-bol, mais ca genere encore ne erreur quand j'ai ellimineé les []
    Le jour est le père du labeur et la nuit est la mère des pensées.

  4. #4
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Meme erreur avec ce code
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    TableHachageMot LireFichierEntree(char const *langue, TableHachageMot *DblTableHash, int *pNbLignes)
    {
     
    	int retour = -1;
    	TableHachageMot *p = DblTableHash
    	FILE *fdesc = NULL;
    	if(pNbLignes != NULL)
    		*pNbLignes = 0;
    	fdesc = ouvrir_fichier_entree(langue);
    	if ( fdesc==NULL )
    	{
    		perror("fopen");
    	}
    	else
    	{
    		char* buff = NULL;
    		char* prec = NULL;
    		char* concat = NULL;
    		size_t tailleBuff = 0;
    		size_t taillePrec = 0;
    		size_t tailleConcat = 0;
    		int ancienneLigne = -1;
    		int ancienneColonne = -1;
    		int ligne = 0;
    		int colonne = -1;
    		ssize_t res;
     
    		printf("Lecture du fichier texte (prog: 1 point pour %d lignes)...\n", PROG_NBLIGNES);
    		while ( (res=get_word(fdesc, &buff, &tailleBuff, &ligne, &colonne))>0 )
    		{
    			if(ancienneLigne == ligne)
    			{
    				static char const separ[] = {SEPARATEUR, '\0'};
     
    				/* Mot sur la même ligne: Ajouter 2seq */
    				if(tailleConcat < 2*tailleBuff)
    				{
    					tailleConcat = 2*tailleBuff;
    					ReallocCharExit(&concat, tailleConcat);
    				}
    				assert(concat != NULL);
     
    				strcpyN(concat, tailleConcat, prec);
    				strcatN(concat, tailleConcat, separ);
    				strcatN(concat, tailleConcat, buff);
     
    				#if 0
    				AfficherEspaces(ancienneColonne);
    				puts(concat);
    				#endif
    				InsertionDoubleHashEx(DblTableHash, concat, ancienneLigne, ancienneColonne);
    			}
    			else
    			{
    				if(ligne%PROG_NBLIGNES==0)
    					putchar('.');
    			}
     
    			/* Mémorise l'ancien mot et son n° de ligne */
    			ancienneLigne = ligne;
    			ancienneColonne = colonne;
    			/* Pour de meilleures performances,
    			  on bosse en double buffer plutot que recopier à chaque fois.*/
    			if(taillePrec != tailleBuff)
    			{
    				taillePrec = tailleBuff;
    				ReallocCharExit(&prec, taillePrec);
    			}
    			assert(prec != NULL);
    			assert(taillePrec == tailleBuff);
    			SwapPtrChar(&prec, &buff);
    		}/*while*/
     
    		if(res < 0)
    			perror("get_word");
    		else
    		{
    			retour = 0; /* OK */
    			putchar('\n');
    			printf("Lu %d lignes.\n", ligne);
    			if(pNbLignes != NULL)
    				*pNbLignes = ligne;
    		}
     
    		/* Nettoyage */
    		free(concat), concat=NULL, tailleConcat=0;
    		free(prec), prec=NULL, taillePrec=0;
    		free(buff), buff=NULL, tailleBuff=0;
    		fclose(fdesc), fdesc=NULL;
    	}/*if fdesc*/
    	return DblTableHash;
    }
    une idée svp?
    Le jour est le père du labeur et la nuit est la mère des pensées.

  5. #5
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par cyrine Voir le message
    MErci paRa-bol, mais ca genere encore ne erreur quand j'ai ellimineé les []
    J'adore ce raisonnement. "Ah bah y'a des [] en trop" **BAM** "A'y est, a plus !"

    Non, plus serieusement, ta fonction doit retourner un tableau de "TableHachageMot" (enfin, c'est ce que tu veux apparement). Le probleme, c'est que tu as definie la fonction retournant simplement "TableHachageMot". Donc, si tu veux retourner un tableau, il faut juste faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TableHachageMot[] LireFichierEntree(...)
    ou
    TableHachageMot* LireFichierEntree(...)
    Je ne sais plus lequel il faut utilisé.

  6. #6
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par SofEvans Voir le message
    J'adore ce raisonnement. "Ah bah y'a des [] en trop" **BAM** "A'y est, a plus !"

    Non, plus serieusement, ta fonction doit retourner un tableau de "TableHachageMot" (enfin, c'est ce que tu veux apparement). Le probleme, c'est que tu as definie la fonction retournant simplement "TableHachageMot". Donc, si tu veux retourner un tableau, il faut juste faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TableHachageMot[] LireFichierEntree(...)
    ou
    TableHachageMot* LireFichierEntree(...)
    Je ne sais plus lequel il faut utilisé.
    Merci
    non je veux juste retourner une table de hash
    Le jour est le père du labeur et la nuit est la mère des pensées.

  7. #7
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TableHachageMot LireFichierEntree(char const *langue, TableHachageMot *DblTableHash, int *pNbLignes)
    {
    ...
    	return DblTableHash;
    }
    Vu que tu retournes DblTableHash qui est déclaré comme un TableHachageMot *, la fonction ne peut retourner qu'un TableHachageMot * quel que soit le code représenté par les ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TableHachageMot  * LireFichierEntree(char const *langue, TableHachageMot *DblTableHash, int *pNbLignes)
    {
    ...
    	return DblTableHash;
    }
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  8. #8
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par diogene Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TableHachageMot LireFichierEntree(char const *langue, TableHachageMot *DblTableHash, int *pNbLignes)
    {
    ...
    	return DblTableHash;
    }
    Vu que tu retournes DblTableHash qui est déclaré comme un TableHachageMot *, la fonction ne peut retourner qu'un TableHachageMot * quel que soit le code représenté par les ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    TableHachageMot  * LireFichierEntree(char const *langue, TableHachageMot *DblTableHash, int *pNbLignes)
    {
    ...
    	return DblTableHash;
    }
    MErci à vous tous,
    là je bloque dans une etape un peu délicate, je veux creer une table de hachage où je vais stocker les 2 table de hacha deja rempli
    du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TwoHash* laFonction(hash table1, hash table2)
    {
        TwoHash * data = malloc(sizeof(TwoHash));
        /* remplissage des deux hash */
        if( erreur) // en cas d'erreur, on efface tout
        {
            free data->first;
            free data->second;
            free data;
            data = NULL;
        }
        return data;
    }
    une idée à cela svp?
    merci
    Le jour est le père du labeur et la nuit est la mère des pensées.

  9. #9
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    là je bloque dans une etape un peu délicate, je veux creer une table de hachage où je vais stocker les 2 table de hacha deja rempli
    La première chose à faire, ce n'est pas d'écrire du code, mais de déterminer une structure de données pour représenter cette table (TwoHash). L'écriture du code dépend de ce choix.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pourquoi retournes-tu DblTableHash, alors que le pointeur n'est pas modifié?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Pourquoi retournes-tu DblTableHash, alors que le pointeur n'est pas modifié?
    Bonsoir Médinoc
    J'ai pas compri ce que tu as mentionné, sachant que j'ai besoin de la table dans le main pour faire le parcours. Donc il faut un return non?
    MErci
    Le jour est le père du labeur et la nuit est la mère des pensées.

  12. #12
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Lorsque tu passe une variable ou structure en utilisant un pointeur, cela se passe comme si la structure dans la fonction est la structure dans l'appelant.
    En gros, une structure passer en pointeur et modifier dans la fonction le sera dans l'appelant.

    Le système de pointeur permet d'éviter de faire une copie lors des passage d'argument a une fonction.

    Donc, puisque tu passe ta structure avec un pointeur, il n'est pas utile de faire un return.

  13. #13
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par SofEvans Voir le message
    Lorsque tu passe une variable ou structure en utilisant un pointeur, cela se passe comme si la structure dans la fonction est la structure dans l'appelant.
    En gros, une structure passer en pointeur et modifier dans la fonction le sera dans l'appelant.

    Le système de pointeur permet d'éviter de faire une copie lors des passage d'argument a une fonction.

    Donc, puisque tu passe ta structure avec un pointeur, il n'est pas utile de faire un return.
    Merci SoftEvan, alors comment on fait l'appel de la structure dans le main?
    Le jour est le père du labeur et la nuit est la mère des pensées.

  14. #14
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Un petit exemple :


    Classique sans pointeur.
    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
     
     
    int main()
    {
        int test = 0;
     
        printf("%d \n", test);
     
        fonctionTest (test);
     
        printf("%d \n", test);
     
    }
     
    void fonctionTest (int test)
    {
        test++;
    }
    Le resultat de ceci est :

    0
    0

    Maintenant une variable int passer en tant que pointeur :
    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
     
     
    int main()
    {
        int test = 0;
     
        printf("%d \n", test);
     
        fonctionTest (&test);
     
        printf("%d \n", test);
     
    }
     
    void fonctionTest (int *test)
    {
        /* Attention a l'ecriture  ! */
        (*test)++;
    }
    Le resultat de ceci est :

    0
    1
    On voit bien qu'il y a eu modification malgres l'absence de return.

    Maintenant, une deuxieme version, plus subtil. Ce n'est plus un int mais un pointeur vers int que l'on declare :
    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
     
     
    int main()
    {
        int *pointeur = (int*) malloc (sizeof(int));
        pointeur = 0;
     
     
        printf("%d \n", *pointeur );
     
        fonctionTest (pointeur );
     
        printf("%d \n", *pointeur );
     
    }
     
    void fonctionTest (int *test)
    {
        /* Attention a l'ecriture  ! */
        (*test)++;
    }
    Le resultat de ceci est :

    0
    1
    Car on a evidemment fait appel a un pointeur

    Il se peut qu'il y est des faute de code (un * ou & mal placer, je pense notamment au printf du dernier exemple).

  15. #15
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    MErci SoftEvans pour ton explication et le temps precieux consacré pour ça
    c'est gentil
    Le jour est le père du labeur et la nuit est la mère des pensées.

  16. #16
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 076
    Points : 2 328
    Points
    2 328
    Par défaut
    Mais de rien.

    On est la pour ca, et ca fait tellement plaisir d'aider quelqu'un de serieux (et de surcroit poli).

Discussions similaires

  1. création d'une table dans une base de donnée accèss
    Par zidenne dans le forum Bases de données
    Réponses: 1
    Dernier message: 25/10/2005, 10h54
  2. Question sur la création d'une table
    Par air dans le forum Oracle
    Réponses: 4
    Dernier message: 23/10/2005, 12h46
  3. Réponses: 4
    Dernier message: 19/10/2005, 11h26
  4. Création d'une table avec foreign key
    Par lepierre dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/09/2004, 14h20
  5. INTERBASE Création d'une table
    Par Corben dans le forum InterBase
    Réponses: 2
    Dernier message: 19/06/2004, 20h55

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