2016-07-21 4 views
0

J'ai 2 tables: 1. Projets , 2. Article_Weights. Tableau Les projets sont connectés au premier DBLookUpCombobox DBLkpCbo_Projects. Il a une colonne Projet qui contient des nombres à quatre chiffres. (1001, 1004, 1008, ...)Comment connecter deux DBLookUpComboboxes qui peuvent être utilisés comme filtre dans Lazarus

Tableau Article_Weights colonnes contenant de projet, Article_Number, Article_Weights etc. Cette table est connecté DBLookUpCombobox DBLkpCbo_Articles. Ce que je veux réaliser, c'est que lorsque je choisis un premier projet de la zone de liste déroulante, la seconde liste déroulante affiche uniquement les numéros d'articles qui appartiennent à ces projets. Après cela lorsque je choisis un numéro d'article de la deuxième liste déroulante, les informations sur cet article seront affichées dans DBGrid.

Le filtrage fonctionne. Je suis coincé sur le dernier point. Quand je choisis un certain nombre d'articles que j'obtiens l'erreur « Les types de données ne correspondent pas aux critères d'expression »

Voici mon code:

procedure TMainForm.DBLkpCbo_ProjectSelect(Sender: TObject); 
begin 
    if DBLkpCbo_Project.ItemIndex <> -1 then begin 
    SQLQuery2.Active:=true; 
    //SQLQuery1.ApplyUpdates(); 
    SQLTransaction1.Commit(); 
    SQLQuery2.Close; 
    SQLQuery2.SQL.Text:='SELECT Article_Number FROM Article_Weights WHERE Project = '+DBLkpCbo_Project.Text+''; 
    SQLQuery2.Open; 
    end; 
end; 


procedure TMainForm.DBLkpCbo_ArticleChange(Sender: TObject); 
begin 
    if DBLkpCbo_Article.ItemIndex <> -1 then begin 
    //DBGrid1.Enabled:=true; 
    SQLQuery3.Active:=true; 
    //SQLQuery1.ApplyUpdates(); 
    SQLTransaction1.Commit(); 
    SQLQuery3.Close; 
    SQLQuery3.SQL.Text:='SELECT Article_Number FROM Article_Weights WHERE Article_Number='+DBLkpCbo_Article.Text+''; 
    SQLQuery3.Open; 
    end; 
end; 

Merci pour toute réponse

Répondre

0

Est-Article_Number un champ de texte ou (comme son nom l'indique) un champ numérique? Si c'est un nombre, DBLkpCbo_Article.Text est-il réellement numérique (c'est-à-dire une chaîne contenant un nombre valide)? Si, comme je le soupçonne, Article_Number est un champ de texte, vous avez omis les guillemets:

SQLQuery3.SQL.Text:='SELECT Article_Number FROM Article_Weights WHERE Article_Number='''+DBLkpCbo_Article.Text+''''; 
+0

Article_Number est situé dans MS Access comme court texte et l'exemple ressemble à ceci: 1004.001.0020. J'ai essayé votre suggestion, mais un message d'erreur apparaît: "Assurez-vous qu'il ne contient pas de caractères non valides ou de signes de ponctuation". Quand j'ai essayé de le renommer en "10040010020" j'ai eu l'erreur "Trop peu de paramètres". – Revan31

+0

Désolé - J'ai utilisé des guillemets doubles au lieu de single - été un moment depuis que j'ai utilisé SQL. Corrigé maintenant. – Dsm

+0

Ça fonctionne vraiment! :) J'ai passé tellement de temps à essayer de résoudre ce problème. Merci beaucoup. – Revan31