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

MFC Discussion :

Obtenir le nombre de lignes dans un RecordSet


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut Obtenir le nombre de lignes dans un RecordSet
    Question : Comment peut-on obtenir le nombre de "records" (ou lignes) dans une base de données :
    "m_pSet->GetRowsetSize()" me donne toujours 1, alors qu'il y a plus de 1000 lignes dans la bdd... pareil pour "m_pSet->GetRecordCount()" qui me donne 1... en utilisant SetRowsetSize(99), j'ai une erreur d'assertion,

    Comment fait-on ? Se mettre sur la première ligne avec MoveFirst, et une boucle for jusqu'à ce que IsEOF renvoie une erreur ?

    Autre question: j'ai un bouton Add qui a la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void CFBHorariesView::OnButtonAdd() 
    {
    	m_pSet->MoveLast();
    	if((CFBHorariesView::AddtoDB())){			//ajoute les données à la base de données
    		AddLinetoGrid();						//on ajoute la ligne à la grille à partir de la base de données
    		//m_pSet->MoveNext();						//passe à l'enregistrement suivant
    		m_ButtonAdd.EnableWindow(FALSE);		//on a fait un ajout, on désactive le bouton pour le prochain enregistrement
    		ResetControls();						//efface sortie, entree, pause
    		grid.Refresh();							//affiche les changements sur la grille
    	}else{
    		AfxMessageBox("Erreur lors de l'ajout à la base de données");
    		return;
    	}
    }
    AddtoDB => ajoute les données a la bdd, là aucun souci.
    AddLinetoGrid => ajoute les données à partir de la bdd dans la grille. Le problème est qu'elle ne passe pas à la ligne suivante quand j'ajoute des données, qui sont pourtant bien répercutées dans la bdd...Où est le problème ? Franchement depuis que j'ai les yeux dessus, je vois plus rien, j'ai tout essayé

  2. #2
    Membre chevronné
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par défaut
    En executant cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) AS NbLignes FROM TaTable
    tu doit avoir le nombre de lignes dans ta Table

  3. #3
    Membre expérimenté

    Inscrit en
    Mai 2005
    Messages
    132
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 132
    Par défaut
    Salut,

    je ne comprends bien ton problème (partiellement parce que je ne comprends bien français), mais a mon avis, il faut utiliser à convenable place "Requery". (Désole si je tirs outre la cible).

    Fredy "KRUGER"

  4. #4
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut
    Je peux la faire en anglais sur le site, c'est toléré ?

    En fait, je ne comprend pas pourquoi après avoir ajouté la ligne dans la base de données, avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if( !m_pSet->Update( ) )				//validation
    	{
    		AfxMessageBox( "Impossible de mettre à jour..." );
    		return FALSE;
    	}
    le pointeur m_pSet reste sur l'enregistrement précédent. et j'ai beau lui mettre du MoveLast() pour voir si quelque chose se passe, ça ne change rien

    EDIT> j'ai rajouté le code de mes 2 fonctions, des fois que ça aide...
    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    //******************************************************************************
    //
    // Adds data to Database
    //
    //******************************************************************************
    BOOL CFBHorariesView::AddtoDB()
    {
    	//float Entree,Sortie,Pause;
     
    	UpdateData(TRUE);					//mise à jour des variables à partir des controles associes
     
    	m_pSet->MoveLast();
     
    	int linenumber	= 1;				// 1 ligne dans le controle "CEdit"...
     
    	int len			= m_EntreeCTRL.LineLength(linenumber);
    	char *txtEntree	= new char [len + 1];
    	memset(txtEntree, '\0', len+1);
    	m_EntreeCTRL.GetLine(linenumber,txtEntree,len);
     
    	len					= m_SortieCTRL.LineLength(linenumber);
    	char *txtSortie		= new char [len + 1];
    	memset(txtSortie, '\0', len+1);
    	m_SortieCTRL.GetLine(linenumber,txtSortie,len);
     
    	len			= m_PauseCTRL.LineLength(linenumber);
    	char *txtPause		= new char [len + 1];
    	memset(txtPause, '\0', len+1);
    	m_PauseCTRL.GetLine(linenumber,txtPause,len);
     
    	/*UINT l1 = m_EntreeCTRL.GetLimitText();
    	UINT l2 = m_SortieCTRL.GetLimitText();
    	UINT l3 = m_PauseCTRL.GetLimitText();*/
     
    	if(EOF == sscanf(txtEntree, "%f", &Entree))
    	{
    		//error
    		AfxMessageBox("Vérifier la syntaxe...");
    		return FALSE;
    	}
     
    	if(EOF == sscanf(txtSortie, "%f", &Sortie))
    	{
    		//error
    		AfxMessageBox("Vérifier la syntaxe...");
    		return FALSE;
    	}
     
    	if(EOF == sscanf(txtPause, "%f", &Pause))
    	{
    		//error
    		AfxMessageBox("Vérifier la syntaxe...");
    		return FALSE;
    	}
     
    	if(Sortie<=Entree || Entree<=0 || Sortie<=0 || Pause<0 || Entree>=24 || Sortie>=24 || Pause>=24 || Pause>=(Sortie-Entree))
    	{
    		AfxMessageBox("Impossible... Vérifiez les heures entrées");
    		return FALSE;
    	}
     
    	m_TotalDay = Sortie-Entree-Pause;	//calcul du total de la journee
     
    	//==============================================
    	//affichage des calculs
    	//==============================================
    	//UpdateData(FALSE);	//mise à jour des controle depuis les variables
     
    	//==============================================
    	//ajout des données dans la bdd
    	//==============================================
    	if( !m_pSet->IsOpen( ) )				//Est-il ouvert?
    		return FALSE;
     
    	if( !m_pSet->CanAppend() )				//Puis-je ajouter? 
    		return FALSE;
     
    	m_pSet->AddNew();						//Bon, je prépare le tampon d'édition
     
    	//==============================================
    	//on insere les données dans la table
    	m_pSet->m_Entree= txtEntree;
    	m_pSet->m_Sortie= txtSortie;
    	m_pSet->m_Pause	= txtPause;
    	//conversion de la valeur float en CString
    	CString s;
    	s.Format(_T("%f"), m_TotalDay);
    	m_pSet->m_TDay	= s;
    	s.Format(_T("%f"), m_TotalDay-7);
    	m_pSet->m_HSup	= s;
     
    	//ajout du nom de l'employe dans le jeu de lignes
    	int CurrentEmployee	= m_ChoosenEmployee.GetCurSel();
    	//CString CurrentEmpCSTR;
    	m_ChoosenEmployee.GetLBText(CurrentEmployee,CurrentEmpCSTR);
    	m_pSet->m_Nom	= CurrentEmpCSTR;
     
    	//ajout de la zone dans le jeu de lignes
    	int CurrentZone	= m_Zone.GetCurSel();
    	CString CurrentZoneCSTR;
    	m_Zone.GetLBText(CurrentZone,CurrentZoneCSTR);
    	m_pSet->m_Zone	= CurrentZoneCSTR;
     
    	//ajout de la date dans le jeu de lignes
    	CTime timeTime;
    	DWORD dwResult = m_DateCTRL.GetTime(timeTime);
     
    	strDate= timeTime.Format("%d/%m/%Y");	// jour /mois / année 
    	m_pSet->m_Date	= strDate;
    	//==============================================
     
    	if( !m_pSet->Update( ) )				// je n'oublie de mettre à jour. C'est la validation
    	{
    		AfxMessageBox( "Impossible de mettre à jour..." );
    		return FALSE;
    	}/*else
    	{
    		AfxMessageBox( "Opération effectuée" );
    		return;
    	}*/
    	delete[] txtEntree,txtSortie,txtPause;	//float = atof(string)
     
    	//==============================================
    	//affichage des calculs
    	//==============================================
    	UpdateData(FALSE);	//mise à jour des controle depuis les variables
    	return TRUE;
    }
    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    //*******************************************************************************
    //===============================================================================
    //ajoute une ligne et la rempli avec les données de la BDD
    //===============================================================================
    //*******************************************************************************
    void CFBHorariesView::AddLinetoGrid()
    {
    	int nRow = -1;				//derniere ligne
     
    	//UpdateData(TRUE);
     
    	m_pSet->Requery();
     
    	GV_ITEM	ItemDate,ItemEntree,ItemSortie,ItemPause,ItemZone,ItemHSup,ItemTDay;
    	//CCellID cell;
    	CString str;
     
    	if(!(grid.InsertRow("",nRow))){
    		AfxMessageBox("Impossible de créer une nouvelle ligne");
    	}
     
    	//str.Format(_T("%f "),Sortie);
    	//str = "15.497545646";
     
    	str=m_pSet->m_Date;
    	ItemDate.mask	=	GVIF_TEXT;
    	ItemDate.row	=	MaxRow;
    	ItemDate.col	=	0;
    	ItemDate.strText=	str;
    	if(!(grid.SetItem(&ItemDate))){
    		AfxMessageBox("erreur de date");
    		return;
    	}
    	str=m_pSet->m_Entree;
    	ItemEntree.mask	=	GVIF_TEXT;
    	ItemEntree.row	=	MaxRow;
    	ItemEntree.col	=	1;
    	ItemEntree.strText=	str;
    	if(!(grid.SetItem(&ItemEntree))){
    		AfxMessageBox("erreur d'entree");
    		return;
    	}
    	str=m_pSet->m_Sortie;
    	ItemSortie.mask	=	GVIF_TEXT;
    	ItemSortie.row	=	MaxRow;
    	ItemSortie.col	=	2;
    	ItemSortie.strText=	str;
    	if(!(grid.SetItem(&ItemSortie))){
    		AfxMessageBox("erreur de sortie");
    		return;
    	}
     
    	str=m_pSet->m_Pause;
    	ItemPause.mask	=	GVIF_TEXT;
    	ItemPause.row	=	MaxRow;
    	ItemPause.col	=	3;
    	ItemPause.strText=	str;
    	if(!(grid.SetItem(&ItemPause))){
    		AfxMessageBox("erreur de pause");
    		return;
    	}
     
    	str=m_pSet->m_Zone;
    	ItemZone.mask	=	GVIF_TEXT;
    	ItemZone.row	=	MaxRow;
    	ItemZone.col	=	4;
    	ItemZone.strText=	str;
    	if(!(grid.SetItem(&ItemZone))){
    		AfxMessageBox("erreur de zone");
    		return;
    	}
     
    	str=m_pSet->m_HSup;
    	ItemHSup.mask	=	GVIF_TEXT;
    	ItemHSup.row	=	MaxRow;
    	ItemHSup.col	=	5;
    	ItemHSup.strText=	str;
    	if(!(grid.SetItem(&ItemHSup))){
    		AfxMessageBox("erreur d'heure sup");
    		return;
    	}
     
    	str=m_pSet->m_TDay;
    	ItemTDay.mask	=	GVIF_TEXT;
    	ItemTDay.row	=	MaxRow;
    	ItemTDay.col	=	6;
    	ItemTDay.strText=	str;
    	if(!(grid.SetItem(&ItemTDay))){
    		AfxMessageBox("erreur de total du jour");
    		return;
    	}
    	MaxRow++;
     
    	//m_pSet->Requery();
     
    	//m_pSet->MoveLast();
     
    	//m_pSet->MoveNext();
    	//m_pSet->SetAbsolutePosition(MaxRow-1);
     
    	//grid.Invalidate();
    	//grid.AutoFill();
     
    	//UpdateData(FALSE);
    	//AfxMessageBox("nouvelle ligne");
    }
    EDIT 2 > Le problème pour trouver le nombre de lignes d'un record set est résolu: c'était bien ce que je pensais, une boucle while ou for, selon les goûts... http://support.microsoft.com/default.aspx?scid=kb;fr;462545
    mais le second problème est toujours là...

    EDIT 3 > problème résolu, merci quand même

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

Discussions similaires

  1. Comment obtenir le nombre de ligne dans une requête ?
    Par totoAussi dans le forum Requêtes
    Réponses: 8
    Dernier message: 06/09/2011, 17h28
  2. Obtenir le nombre de lignes affecté dans une procédure stockée
    Par MaelstroeM dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 23/03/2011, 12h01
  3. Réponses: 8
    Dernier message: 20/06/2005, 15h10
  4. [Fichier] Nombre de ligne dans un fichier texte
    Par NewSer dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 10/11/2004, 16h58
  5. Réponses: 2
    Dernier message: 02/03/2004, 19h38

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