Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Je travaille actuellement sur powerbuilder7 et je rencontre un problème lors de la modification du where d'un select d'une datawindows. }
--------------------------------------------------------------------------------
1-Voici le select original de ma data window:
SELECT ~"AVI_PAYT_OPERATION~".~"PAYT_OPER_ID~",
~"AVI_PAYT_OPERATION~".~"ACCOUNT_NUM~",
~"AVI_PAYT_OPERATION~".~"DAT_OPER~",
~"AVI_PAYT_OPERATION~".~"PAYTYP_ID~",
~"AVI_PAYT_OPERATION~".~"AMOUNT~",
~"AVI_PAYT_OPERATION~".~"OPERATION_TYPE_ID~",
~"AVI_PAYT_OPERATION~".~"PAYMENT_CENTER_ID~",
~"AVI_PAYT_OPERATION~".~"INVOICE_NUMBER~",
~"AVI_PAYT_OPERATION~".~"INVOICE_DATE~",
~"AVI_ACCOUNT~".~"OWNER_NAME~",
~"AVI_PAYT_TYPE~".~"PAYTYP_STR~",
~"AVI_OPERATION_TYPE~".~"OPERATION_STR~",
~"AVI_PAYMENT_CENTER~".~"PAYMENT_CENTER~"
FROM ~"AVI_PAYT_OPERATION~",
~"AVI_ACCOUNT~",
~"AVI_PAYT_TYPE~",
~"AVI_OPERATION_TYPE~",
~"AVI_PAYMENT_CENTER~"
WHERE ( ~"AVI_PAYT_TYPE~".~"PAYTYP_ID~"(+) = ~"AVI_PAYT_OPERATION~".~"PAYTYP_ID~" ) and
( ~"AVI_ACCOUNT~".~"ACCOUNT_NUM~"(+) = ~"AVI_PAYT_OPERATION~".~"ACCOUNT_NUM~" ) and
( ~"AVI_OPERATION_TYPE~".~"OPERATION_TYPE_ID~"(+) = ~"AVI_PAYT_OPERATION~".~"OPERATION_TYPE_ID~" ) and
( ~"AVI_PAYMENT_CENTER~".~"PAYMENT_CENTER_ID~"(+) = ~"AVI_PAYT_OPERATION~".~"PAYMENT_CENTER_ID~" ) and
( ~"AVI_PAYT_OPERATION~".~"ACCOUNT_NUM~" = ~"AVI_ACCOUNT~".~"ACCOUNT_NUM~" )
--------------------------------------------------------------------------------
2- Voici le code me permettant de générer la condition where:
ls_SelectStr = "AND (~~~"AVI_PAYT_OPERATION~~~".~~~"DAT_OPER~~~" > TO_DATE(~~~'" + ls_Date + "~~~', ~~~'DD/MM/YY~~~'))"
IF ls_OwnerName1 <> '#' THEN
ls_SelectStr = ls_SelectStr + " AND (UPPER(~~~"AVI_ACCOUNT~~~".~~~"Owner_Name~~~") like ('%" + UPPER(ls_OwnerName1) + "%'))"
END IF
IF li_account <> 0 THEN
ls_SelectStr = ls_SelectStr + " AND (~~~"AVI_ACCOUNT~~~".~~~"Account_Num~~~" = " + string(li_account) + ")"
END IF
IF li_ComunaId <> 0 THEN
ls_SelectStr = ls_SelectStr + " AND (~~~"AVI_ACCOUNT~~~".~~~"Comuna_ID~~~" = " + String(li_ComunaId) + ")"
END IF
--------------------------------------------------------------------------------
3- Voici le code de la mise a jour du where:
//Get original Select
ls_OriginalSelect = dw_new_invoice_list.Describe("DataWindow.Table.Select")
ls_NewSelect = "DataWindow.Table.Select='" + ls_OriginalSelect + ls_WhereClause + "'"
// For debug only
//MessageBox("Controle", ls_OriginalSelect )
//MessageBox("Controle", ls_WhereClause )
//MessageBox("Controle", ls_NewSelect )
// Update Select Query
ls_Return = dw_new_invoice_list.Modify(ls_NewSelect)
IF ls_Return <> "" THEN
dw_new_invoice_list.Retrieve( )
ELSE
MessageBox("Status", "Modification of w_sheet_report_new_invoice / dw_new_invoice_list Failed" + ls_Return)
END IF
--------------------------------------------------------------------------------
4- Résultat de test :
Message d'erreur 1 : Select error : ORA-00936: missing expression (lorsque je rentre un champ de type ls_OwnerName1 (j'ai du faire une erreur a la con... mais ce n'est pas le problème principal)
Message d'erreur 2 : Modification of w_sheet_report_new_invoice / dw_new_invoice_list Failed indiquant que le mise a jour ne s'est pas déroulé correctement.
J'avoue que la je bloque. Surtout que l'erreur 2 ne précise rien, et je ne vois pas l'erreur dans le code.
Lorsque j'exécute mon select avec SQL Plus, cela fonctionne. Donc pourquoi une erreur avec PowerBuilder !!!
Je vous remercie d'avance pour votre aide.
Cordialement
Hors ligne
Je ne sais pas pourquoi tu nous met le tilde (~) en triple exemplaire. Un seul exemplaire du tilde(~) est nécessaire devant chaque double quote.
Perso j'utilise les fonction getsqlselect et setsqlselect mais je ne pense pas que l'utilisation du modify soit la cause de ton problème. Tu peux malgré tout essayer avec ces deux fonctions, on ne sait jamais...
A+
Vincent
Hors ligne
Bonjour et , pense à utiliser la balise de code PB.
Hors ligne