[SGBD] dBase, strings, replace et doubles

dBase, strings, replace et doubles [SGBD] - SQL/NoSQL - Programmation

Marsh Posté le 12-04-2006 à 15:08:19    

dBase semble ne pas être typé.
 
En tout cas, dans des champs numériques, je me retrouve avec des chaînes de caractères formattées.
 
Le séparateur de décimales est le point.
 
Mon PC est configuré en américain, donc pas de souci, ça marchait.
 
Puis j'ai eu des problèmes d'oppérabilité avec un autre server, et pour vérifier je suis passé en français. Proutch.
 
Pas grave me dis-je : je vais forcer le thread de mon programme à tourner en "en-us". Ben nan, le drivers MSJET se moque de la culture du thred, ce qui l'intéresse c'est celle du sysème apparement.
 
Pas grave me dis-je : je vais obliger les gens à tourner en français (ça tombe bien, c'est déployé qu'en france), et je vais faire un "CDbl(Replace(champ, '.', ','))" sur mes champs numériques...
 
Bah nan, parceque dBase a bien "Trim()", "CDbl()", "Mid()", mais pas "Replace()" :gun:
 
Bon, je fais comment moi maintenant :sweat:

Reply

Marsh Posté le 12-04-2006 à 15:08:19   

Reply

Marsh Posté le 12-04-2006 à 15:26:57    

T'ain de logiciel de merde :o
 
Avant (c'était déjà pas glorieux mais bon) :
 

Code :
  1. cmd.CommandText = "SELECT COMM.CODE_FOURN, four.NOMFOURNI, Sum(COMM.QTE_CMDE), Sum(COMM.PRIX_VENTE*COMM.QTE_CMDE), Sum(comm.px_vte_tht*comm.qte_cmde), Sum(comm.qte_cmde*comm.prix_achat), Sum(comm.px_vte_tht*comm.qte_cmde)-Sum(comm.qte_cmde*comm.prix_achat), round(Sum(comm.qte_cmde*comm.prix_vente)/Sum(comm.qte_cmde*comm.prix_achat), 2) " +
  2.         "FROM PARA INNER JOIN ((COMV INNER JOIN COMM ON COMV.NUMEROCOM = COMM.NUMEROCOM) INNER JOIN four ON COMM.CODE_FOURN = four.CODE_FOURN) ON PARA.MAG_DEFAUT = COMV.MAGASIN " +
  3.         "WHERE (((COMV.DATE_CMDE) Like '%" + d1 + "') AND ((COMM.TYPE_MOUVE)='C') AND ((COMM.TYPE_ARTIC)<>'T') AND ((COMM.ETAT_CMDE) In ('T','E')))" +
  4.         "GROUP BY COMM.CODE_FOURN, four.NOMFOURNI";


 
Après :
 


   cmd.CommandText = "SELECT COMM.CODE_FOURN, four.NOMFOURNI, Sum(CDbl(Trim(Mid(COMM.QTE_CMDE, 1, INSTR(COMM.QTE_CMDE, '.') - 1) + ',' + Mid(COMM.QTE_CMDE, INSTR(COMM.QTE_CMDE, '.') + 1, LEN(COMM.QTE_CMDE) - INSTR(COMM.QTE_CMDE, '.'))))), " +
    "Sum(CDbl(Trim(Mid(COMM.PRIX_VENTE, 1, INSTR(COMM.PRIX_VENTE, '.') - 1) + ',' + Mid(COMM.PRIX_VENTE, INSTR(COMM.PRIX_VENTE, '.') + 1, LEN(COMM.PRIX_VENTE) - INSTR(COMM.PRIX_VENTE, '.'))))*CDbl(Trim(Mid(COMM.QTE_CMDE, 1, INSTR(COMM.QTE_CMDE, '.') - 1) + ',' + Mid(COMM.QTE_CMDE, INSTR(COMM.QTE_CMDE, '.') + 1, LEN(COMM.QTE_CMDE) - INSTR(COMM.QTE_CMDE, '.'))))), " +
    "Sum(CDbl(Trim(Mid(COMM.PX_VTE_THT, 1, INSTR(COMM.PX_VTE_THT, '.') - 1) + ',' + Mid(COMM.PX_VTE_THT, INSTR(COMM.PX_VTE_THT, '.') + 1, LEN(COMM.PX_VTE_THT) - INSTR(COMM.PX_VTE_THT, '.'))))*CDbl(Trim(Mid(COMM.QTE_CMDE, 1, INSTR(COMM.QTE_CMDE, '.') - 1) + ',' + Mid(COMM.QTE_CMDE, INSTR(COMM.QTE_CMDE, '.') + 1, LEN(COMM.QTE_CMDE) - INSTR(COMM.QTE_CMDE, '.'))))), " +
    "Sum(CDbl(Trim(Mid(COMM.QTE_CMDE, 1, INSTR(COMM.QTE_CMDE, '.') - 1) + ',' + Mid(COMM.QTE_CMDE, INSTR(COMM.QTE_CMDE, '.') + 1, LEN(COMM.QTE_CMDE) - INSTR(COMM.QTE_CMDE, '.'))))*CDbl(Trim(Mid(COMM.PRIX_ACHAT, 1, INSTR(COMM.PRIX_ACHAT, '.') - 1) + ',' + Mid(COMM.PRIX_ACHAT, INSTR(COMM.PRIX_ACHAT, '.') + 1, LEN(COMM.PRIX_ACHAT) - INSTR(COMM.PRIX_ACHAT, '.'))))), " +
    "Sum(CDbl(Trim(Mid(COMM.PX_VTE_THT, 1, INSTR(COMM.PX_VTE_THT, '.') - 1) + ',' + Mid(COMM.PX_VTE_THT, INSTR(COMM.PX_VTE_THT, '.') + 1, LEN(COMM.PX_VTE_THT) - INSTR(COMM.PX_VTE_THT, '.'))))*CDbl(Trim(Mid(COMM.QTE_CMDE, 1, INSTR(COMM.QTE_CMDE, '.') - 1) + ',' + Mid(COMM.QTE_CMDE, INSTR(COMM.QTE_CMDE, '.') + 1, LEN(COMM.QTE_CMDE) - INSTR(COMM.QTE_CMDE, '.')))))-" +
    "Sum(CDbl(Trim(Mid(COMM.QTE_CMDE, 1, INSTR(COMM.QTE_CMDE, '.') - 1) + ',' + Mid(COMM.QTE_CMDE, INSTR(COMM.QTE_CMDE, '.') + 1, LEN(COMM.QTE_CMDE) - INSTR(COMM.QTE_CMDE, '.'))))*CDbl(Trim(Mid(COMM.PRIX_ACHAT, 1, INSTR(COMM.PRIX_ACHAT, '.') - 1) + ',' + Mid(COMM.PRIX_ACHAT, INSTR(COMM.PRIX_ACHAT, '.') + 1, LEN(COMM.PRIX_ACHAT) - INSTR(COMM.PRIX_ACHAT, '.'))))), " +
    "round(Sum(CDbl(Trim(Mid(COMM.QTE_CMDE, 1, INSTR(COMM.QTE_CMDE, '.') - 1) + ',' + Mid(COMM.QTE_CMDE, INSTR(COMM.QTE_CMDE, '.') + 1, LEN(COMM.QTE_CMDE) - INSTR(COMM.QTE_CMDE, '.'))))*CDbl(Trim(Mid(COMM.PRIX_VENTE, 1, INSTR(COMM.PRIX_VENTE, '.') - 1) + ',' + Mid(COMM.PRIX_VENTE, INSTR(COMM.PRIX_VENTE, '.') + 1, LEN(COMM.PRIX_VENTE) - INSTR(COMM.PRIX_VENTE, '.')))))/" +
    "Sum(CDbl(Trim(Mid(COMM.QTE_CMDE, 1, INSTR(COMM.QTE_CMDE, '.') - 1) + ',' + Mid(COMM.QTE_CMDE, INSTR(COMM.QTE_CMDE, '.') + 1, LEN(COMM.QTE_CMDE) - INSTR(COMM.QTE_CMDE, '.'))))*CDbl(Trim(Mid(COMM.PRIX_ACHAT, 1, INSTR(COMM.PRIX_ACHAT, '.') - 1) + ',' + Mid(COMM.PRIX_ACHAT, INSTR(COMM.PRIX_ACHAT, '.') + 1, LEN(COMM.PRIX_ACHAT) - INSTR(COMM.PRIX_ACHAT, '.'))))), 2) " +
    "FROM PARA INNER JOIN ((COMV INNER JOIN COMM ON COMV.NUMEROCOM = COMM.NUMEROCOM) INNER JOIN four ON COMM.CODE_FOURN = four.CODE_FOURN) ON PARA.MAG_DEFAUT = COMV.MAGASIN " +
    "WHERE (((COMV.DATE_CMDE) Like '%" + d1 + "') AND ((COMM.TYPE_MOUVE)='C') AND ((COMM.TYPE_ARTIC)<>'T') AND ((COMM.ETAT_CMDE) In ('T','E')))" +
    "GROUP BY COMM.CODE_FOURN, four.NOMFOURNI";


 
On va pas parler des performances hein :o

Reply

Marsh Posté le 12-04-2006 à 15:29:14    

Oulalah c'est de la requête méga optimized çà !!! :D
En + c'est super simple à lire, c'est pratique pour debugger :D

Reply

Marsh Posté le 12-04-2006 à 16:04:44    

Tu m'étonnes :sweat:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed