PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → EBP Gestion commerciale
EBP Gestion commerciale
Iniciado por jmsouchez, 19,ago. 2020 11:16 - 2 respuestas
Publicado el 19,agosto 2020 - 11:16
Bonjour,

J'interroge une base EBP sous SQL SERVER.
En lecture, tout va bien, les requêtes SELECT fonctionnent parfaitement.
En écriture, je cherche à créer une ligne de commande mais je suis confronté au problème de l'identifiant unique de la ligne.
Je pensais qu'il était affecté automatiquement mais à priori, non.
Une idée, s'il vous plait ou un retour d'expérience ?

LocInsEBP = "INSERT INTO SaleDocumentLine (Id, DocumentId, LineType, LineOrder, Description, DescriptionClear, ItemId"", IsReferencedItem, Quantity, RealQuantity, UnitId, StoreHouseId"", IsPrintable, QuantityDecimalNumber, PricesDecimalNumber, PurchasePrice, CostPrice)" VALUES (0, '"+ReqLecEBP.DocumentId+"', "+ReqLecEBP.LineType+", "+LocNumLigne+", '"+ReqLecEBP.Description+"', '"+ReqLecEBP.DescriptionClear+"', '"+ReqLecEBP.ItemId"', '"+ReqLecEBP.IsReferencedItem+"', "+Table_LigneDetail.COL_NB_METRE+", "+Table_LigneDetail.COL_NB_METRE+", '"+ReqLecEBP.UnitId+"', '"+ReqLecEBP.StoreHouseId+"', "+ReqLecEBP.IsPrintable+", "+ReqLecEBP.QuantityDecimalNumber+", "+ReqLecEBP.PricesDecimalNumber+", "+ReqLecEBP.PurchasePrice+", "+ReqLecEBP.CostPrice+")"
SI PAS HExécuteRequêteSQL(ReqInsEBP,"MaConnexionSQL",hRequêteSansCorrection,LocInsEBP) ALORS
info("Erreur exécution requête ReqInsEBP : " + HErreurInfo() + RC + SQL.MesErreur + RC + LocInsEBP)
FIN

Question : comment affecter l'ID de la ligne de commande en création ?
Merci pour vos réponses.
Miembro registrado
953 mensajes
Publicado el 19,agosto 2020 - 11:52
bonjour Jean-Marc,

il faudrait regarder sur des documents existants, voir les valeurs, mais j'ai l'impression que se sont des guid ( résultat de la fonction DonneGuid() )
à contrôler aussi la description de la table SaleDocumentLine sous SQL Server...
quel est le type de la colonne Id

voir aussi, si vous ne spécifiez pas la valeur de Id dans votre requête, si SQL Server ne va pas justement lui attribuer une valeur. Là vous indiquez explicitement la valeur 0, faite déjà un test en enlevant Id de votre requête , un peu comme ceci :


LocInsEBP = "INSERT INTO SaleDocumentLine (DocumentId, LineType, LineOrder, Description, DescriptionClear, ItemId"", IsReferencedItem, Quantity, RealQuantity, UnitId, StoreHouseId"", IsPrintable, QuantityDecimalNumber, PricesDecimalNumber, PurchasePrice, CostPrice)" VALUES ('"+ReqLecEBP.DocumentId+"', "+ReqLecEBP.LineType+", "+LocNumLigne+", '"+ReqLecEBP.Description+"', '"+ReqLecEBP.DescriptionClear+"', '"+ReqLecEBP.ItemId"', '"+ReqLecEBP.IsReferencedItem+"', "+Table_LigneDetail.COL_NB_METRE+", "+Table_LigneDetail.COL_NB_METRE+", '"+ReqLecEBP.UnitId+"', '"+ReqLecEBP.StoreHouseId+"', "+ReqLecEBP.IsPrintable+", "+ReqLecEBP.QuantityDecimalNumber+", "+ReqLecEBP.PricesDecimalNumber+", "+ReqLecEBP.PurchasePrice+", "+ReqLecEBP.CostPrice+")"
SI PAS HExécuteRequêteSQL(ReqInsEBP,"MaConnexionSQL",hRequêteSansCorrection,LocInsEBP) ALORS
info("Erreur exécution requête ReqInsEBP : " + HErreurInfo() + RC + SQL.MesErreur + RC + LocInsEBP)
FIN
Publicado el 19,agosto 2020 - 13:58
Bonjour Christophe,

Oui, j'ai déjà essayé cela et voici les messages d'erreur correspondant :
- Id = 0 : Conflit de types d'opérandes<ESP>: int est incompatible avec uniqueidentifier
- Id = NULL : Impossible d'insérer la valeur NULL dans la colonne 'Id', table 'CDO_0895452f-b7c1-4c00-a316-c6a6d0ea4bf4.dbo.SaleDocumentLine'. Cette colonne n'accepte pas les valeurs NULL.
- Id non mis dans la requête : Impossible d'insérer la valeur NULL dans la colonne 'Id', table 'CDO_0895452f-b7c1-4c00-a316-c6a6d0ea4bf4.dbo.SaleDocumentLine'. Cette colonne n'accepte pas les valeurs NULL.

Dans SQL Server, le champ ID de la table SaleDocumentLine est configuré comme suit :
Type de données = uniqueidentifier
Clé primaire = True
Est calculé = False
Longueur = 16
La valeur de l'Id correspond à "262A3BB6-3061-44E9-90F2-FFFCD2E9C4FE"

Après un ultime essai, il faut affecter la valeur "NEWID()" et l'insertion fonctionne !

Merci pour ton aide.