Bonjour à tous,
Je débute dans la programmation des bases de données, et je vais essayer d'être le plus clair possible avec mon problème.

J'ai écris un programme pour afficher les données sur un DBGrid (Colonne 'ID' et Colonne 'Name') et ça marche bien. Le problème c'est que quand je veux par exemple faire le comptage ou bien lister dans un ComboBox tous les nom 'Name' qu'il y a dans la table, l'affichage dans le DBGrid s'efface (puisque c'est la même SQLQuery1 qui est utilisée).

Pour éviter ce problème, j'ai créé une deuxième SQLQuery 'SQLQuery2' qui m'est nécessaire pour faire toutes les opérations dans la même table mais sans en affecter l'affichage dans le DBGrid.

Ca marchait nickel mais je ne sais pour quelle raison, ça ne marche plus. c-à-d. que lorsque la SQLQuery2 s'exécute alors que les données sont affichées dans le DBGrid, j'ai un crash avec un message d'erreur :
Project raised exception class 'EODBCExeception' with message : Could not retrieve primary key metadata for table using SQLPrimaryKeys...

pour l'affichage de la table dans le DBGrid, le code utilisé est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
SQLQuery1ManageTableDisplay.Close;
SQLQuery1ManageTableDisplay.SQL.Text:= 'SELECT * FROM Table;';
SQLQuery1ManageTableDisplay.Open;
pour le listage des noms 'Name' qu'il y a dans la table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
SQLQuery2ListItems.Close;
SQLQuery2ListItems.SQL.Text:= 'SELECT Name FROM Table;';
SQLQuery2ListItems.Open;
Lors du crash, la ligne " SQLQuery2ListItems.Open; " est mise en surbrillance.

Pour information, tous les paramètres sont par défaut.
Lazarus v3.2

Des recommandations ?

PS/ Avant l'exécution de chaque requête SQLQuery.Open, j'ai essayé de fermer l'autre requête en ajoutant une instruction 'SQLQuery.Close'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SQLQuery2ListItems.Close;
SQLQuery1ManageTableDisplay.Close;
SQLQuery1ManageTableDisplay.SQL.Text:= 'SELECT * FROM Table;';
SQLQuery1ManageTableDisplay.Open;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SQLQuery1ManageTableDisplay.Close;
SQLQuery2ListItems.Close;
SQLQuery2ListItems.SQL.Text:= 'SELECT Name FROM Table;';
SQLQuery2ListItems.Open;
Comme ça ça marche mais je perd l'afficahge dans le DBGrid !!