Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Alors voila, j'ai créé une costum class regroupant plusieurs fonctions, l'une d'elle étant l'ouverture d'une table (non spécifique), avec champ et nom de table passés en paramêtres.
Cette fonction à pour but de récupérer le plus grand identifiant de la clef primaire d'une table.
Niveau code ça donne :
Appel de la fonction :
fu_max_id( String ls_table_name, String ls_field_name )
Requête SQL :
DECLARE cur_id CURSOR FOR
SELECT Max(:ls_field_name)
FROM :ls_table_name
USING sqlca;
Le soucis vient du fait qu'apparement la requète ne prend pas en compte les arguments. J'ai fais quelques recherches sur le site et j'ai pu voir que cela pouvait différer d'un SGBD à l'autre. Pour ma part j'utilise Sybase (SQL Anywhere 12) et je travaille sous PB 12.1.
Autant pour une clause Where le passage en argument ne pose aucun soucis, autant pour un Select ou un From ça pêche...
J'aurais donc aimé savoir si certains d'entre vous on déjà eu le même problème, et donc savoir si je ne me suis pas planté dans le code, sinon savoir s'il y a moyen de contourner le problème.
Merci d'avance et bon w-e.
Dernière modification par Soryu (25-03-2011 14:19:20)
Hors ligne
Alors :
2) Regarde l'aide de PB sur "Dynamic SQL Format 3 SQL statement"
1) C'est la pire des méthodes pour créer une clef primaire. En particulier, si tu as beaucoup d'insertions tu es sûr d'avoir des problèmes de deadlock. Pourquoi tu n'utilise pas une colonne identity ?
Hors ligne
La finalité de la classe est de créer une table recensant les enregistrements vide et de pouvoir les réutiliser.
La requète me sert juste à récupérer le nombre d'enregistrements présent dans la table, afin de pouvoir, par la suite, tester chaque ligne d'enregistrement, par itération.
Sans cet identifiant maximum, je ne sais pas combien d'itération je devrais faire.
Je ne suis sous PB que depuis 2 semaines ^^" Et le SQL dynamique lui étant lié ne me parle pas des masses
Hors ligne
Soryu a écrit:
La requète me sert juste à récupérer le nombre d'enregistrements présent dans la table
Dans ce cas, c'est plutôt Count que Max.
ça doit faire un truc comme ça
ls_select = "SELECT Max(...) FROM .." DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ; PREPARE SQLSA FROM ls_select ; OPEN DYNAMIC my_cursor ; FETCH my_cursor INTO :ll_id ; CLOSE my_cursor ;
Hors ligne
Nickel chrome, je cherchais un moyen par concaténation, c'est parfait ^^"
Merci à toi !
Hors ligne