Le 26 mai 08 à 09:47, Stephane Pinel a écrit :
Pouvez-vous m'envoyer un projet RB test avec la description de la
structure de la table PGSQL en question ?
Ci-joint un bout de code qui reproduit le problème. (PS: impossible de
vous envoyer un mail)
Les objets sont:
Une fenêtre: Window1
Un PopupMenu: PopupMenu1
Une ListBox= ListBox1
Code 'Open' de PopupMenu1:
//****************************************
Dim db as PostgreSQLDatabase
db= New PostgreSQLDatabase
dim query as string
dim rs as recordset
Dim v as String
Dim i as Integer
db.host="localhost"
db.port=5432
db.DatabaseName="sxcollecte"
db.Username="postgres"
db.Password=""
If db.connect then
query="SELECT nom FROM clients order by nom"
rs=db.SQLSelect(query)
if rs <> nil then
popupmenu1.DeleteAllRows
While Not rs.eof
v = rs.IdxField(1).StringValue
popupmenu1.AddRow v
rs.MoveNext
Wend
popupmenu1.listindex=0
else
MsgBox "rs nil : " + db.ErrorMessage
end if
else
MsgBox "The connection failed."
end if
//****************************************
Code 'Change' de PopupMenu1:
//****************************************
Dim db as PostgreSQLDatabase
db= New PostgreSQLDatabase
dim query as string
dim rs as recordset
Dim v as String
Dim i as Integer
db.host="localhost"
db.port=5432
db.DatabaseName="sxcollecte"
db.Username="postgres"
db.Password=""
If db.connect then
//récupération de l'ID du client à partir du nom choisi via le
popupmenu
query="SELECT clients.id FROM clients WHERE clients.nom = "
+"'" + PopupMenu1.text + "'"+""
rs=db.SQLSelect(query)
if rs <> nil then
v = rs.IdxField(1).StringValue
else
MsgBox db.ErrorMessage
end if
query="SELECT conteneurs.volume FROM ""conteneurs"" INNER JOIN
clients ON conteneurs.client_id=clients.id AND clients.id =" + "'" + v
+ "'" + "order by conteneurs.volume"
rs=db.SQLSelect(query)
if rs <> nil then
Listbox1.DeleteAllRows
Listbox1.Columncount = rs.FieldCount
//l'entête
Listbox1.AddRow rs.IdxField(1).Name
Listbox1.CellBold(Listbox1.LastIndex, 0) = True
For i = 2 to rs.FieldCount
Listbox1.Cell(Listbox1.lastIndex, i - 1) = rs.IdxField(i).Name
Listbox1.CellBold(Listbox1.LastIndex, i - 1) = True
Next
While Not rs.eof
v = rs.IdxField(1).StringValue
Listbox1.AddRow v
For i = 2 to rs.fieldcount
Listbox1.Cell(Listbox1.lastIndex, i - 1) =
rs.IdxField(i).StringValue
next
rs.MoveNext
Wend
else
MsgBox db.ErrorMessage
end if
else
MsgBox "The connection failed."
end if
//****************************************
La base est constituée des tables 'clients' et 'conteneurs'
table clients:
id
nom
table conteneurs:
id
volume
client_id
Je précise que:
- J'utilise RB2007.1
- tout se passe bien sous un Mac G4 avec la version RB2004 du plugin
postgreSQL
- Sous mac Intel, j'utilise la version 2008 du plugin PostgreSQL (la
version 2004 ne se compile pas) et j'essaie de me connecter à une base
PostrgeSQL version 8.3.1
Merci pour l'attention portée à mon problème.
|