Search  
Tuesday, August 16, 2022 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Client/Server  Comanda SELECT ...
 Comanda SELECT SQL creeaza un FREE TABLE?
 
 6/18/2020 1:51:26 PM
User is offlineflorinbad
60 posts
https://www.turismcultural.ro




Comanda SELECT SQL creeaza un FREE TABLE?
 (N/A)
Client: VFP9
Server MariaDB

M-am lovit de o problema careia nu-i dau de cap: aduc local produsele unei facturi din server iar in server campul val_tva este DECIMAL(11.2).
In server am valoarea stornata -14858013.72. La crearea cursorului, valoarea adusa local este -1485801.7.

csqlverific="SELECT * FROM fproduse WHERE factura='"+ALLTRIM(STR(wfactura))+"' ORDER BY nr"
lnResult = SQLEXEC(_Screen.oApp.nConnectionHandle,csqlverific,"crsp")

Imi pueti da vreo idee? Multumesc!
 6/18/2020 6:43:08 PM
User is offlineCostel
335 posts
www.adrisoft.ro
3rd




Re: Comanda SELECT SQL creeaza un FREE TABLE?
 (N/A)
Incearca si comanda urmatoare sa vezi ce obtii

"SELECT P.*, P.val_tva+00000000.00 as vall_tva FROM fproduse P WHERE P.factura=?wfactura ORDER BY P.nr"

aceste artificiu +00000000.00 m-a scos de multe ori din incurcatura
.
.
.
.
Spor!

Nu munci atit de mult incit sa nu-ti mai ramina timp ca sa cistigi bani. (proverb evreiesc)
 6/18/2020 9:14:31 PM
User is offlineflorinbad
60 posts
https://www.turismcultural.ro




Re: Comanda SELECT SQL creeaza un FREE TABLE?
 (N/A)
Nu merge. Iti multumesc oricum!
Ce-am face daca ar fi inflatie si am avea nevoie de campuri de sute de milioane de lei si doua zecimale (12.2)? SELECT-ul ar aduce datele tot la standardul tabelei free de 10 caractere numerice?
 6/18/2020 10:08:12 PM
User is offlineflorinbad
60 posts
https://www.turismcultural.ro




Re: Comanda SELECT SQL creeaza un FREE TABLE?
 (N/A)
Am rezolvat momentan, modificand campul numeric in cauza (valtva) din MariaDB din DECIMAL in DOUBLE.
Doar asa SELECTUL mi-a adus valoarea dorita completa (-1485801.72 si nu -1485801.7 cum era inainte la DECIMAL).
Nu cred ca este o rezolvare pentru viitor deoarece tipul DOUBLE nu se recomanda la tranzactii financiare, rotunjind zecimalele (valoarea .78 mi-a fost rotunjita la .70 dupa ce am modificat tipul campului din DECIMAL in DOUBLE; bine ca am doar o singura valoare atat de mare).
 6/19/2020 11:40:43 AM
User is offlineDaniel Buduru
3528 posts
1st




Re: Comanda SELECT SQL creeaza un FREE TABLE?
 (Romania) Modified By Daniel Buduru  on 6/19/2020 11:44:02 AM)


Daniel Buduru
 6/19/2020 11:41:14 AM
User is offlineDaniel Buduru
3528 posts
1st




Re: Comanda SELECT SQL creeaza un FREE TABLE?
 (Romania) Modified By Daniel Buduru  on 6/19/2020 11:45:44 AM)
In vfp nu se poate specifica tipul campurilor returnate de sqlexec.
Se poate pune SET DECIMALS TO 4 inainte de sqlexec, functioneaza icu MySQL, nu stiu de mariaDB.
Remote View si CursorAdapter permit definirea tipului campurilor returnate de un SPT.
Preferabil CA, mai usor de utilizat decar RW.
In VFP, tipul consacrat este Money, care stocheaza valoarea ca integer, astfel incat sa nu fie afectata de setari DECIMALS in timpul unor operatii.

Daniel Buduru
 6/19/2020 12:50:26 PM
User is offlineCostel
335 posts
www.adrisoft.ro
3rd




Re: Comanda SELECT SQL creeaza un FREE TABLE?
 (N/A)
răspunsul meu, precedent, era pentru situația cînd selectul avea loc în VFox
SGBD-urile nu creează asemenea probleme, presupun ca de vina ar fi driverul ODBC cu care te conectez
o sugestie de a ocoli problema ar fi:
- folosirea funcției CAST(Val_tv as duble) as vall_tva
- CAST(Val_tv as char(25)) as vall_tva în VFox cu funcția VAL convertești în numeric

dar mai mult ca sigur problema e în altă parete

spor!

Nu munci atit de mult incit sa nu-ti mai ramina timp ca sa cistigi bani. (proverb evreiesc)
 6/19/2020 8:14:52 PM
User is offlineflorinbad
60 posts
https://www.turismcultural.ro




Re: Comanda SELECT SQL creeaza un FREE TABLE?
 (N/A) Modified By florinbad  on 6/19/2020 8:22:38 PM)
Multumesc Daniel Buduru pentru sugestii!
 6/19/2020 8:20:34 PM
User is offlineflorinbad
60 posts
https://www.turismcultural.ro




Re: Comanda SELECT SQL creeaza un FREE TABLE?
 (N/A) Modified By florinbad  on 6/19/2020 8:24:54 PM)
SELECTUL are loc in fox. Problema este ca fox-ul aduce datele corecte din server intr-o tabela free, unde campul numeric este limitat la 10 caractere. Ciudat este ca modificand doar tipul campului in server, din DECIMAL in DOUBLE, mi-a returnat 11 caractere in campul numeric.
Multumesc, Costel, voi testa si cu CAST.
 6/19/2020 10:14:24 PM
User is offlineDaniel Buduru
3528 posts
1st




rRe: Comanda SELECT SQL creeaza un FREE TABLE?
 (Romania)
Selectul din comanda SQLEXEC are loc pe server.
Poti folosi CAST in select, dar el se va executa pe server, si va converti valoarea intr-un alt tip cunoscut de server, si nu intrun tip VFP.
Ramane acceasi problema la maparea tipurilor campurilor intre ce intoarce sqlexec in rezultset si cum il atribuie VFP.
VFP stabileste tipul si dimensiunea campului dupa prima valoare intalnita, de aici solutia lui Costel, care forteaza o dimensiune mare a campului inca de la prima linie.
Solutia este una singura, pre-definirea cursorului vfp care primeste rezultatul comenzii sqlexec. Remote View sau CursorAdapter.
Nu mai am un vfp instalat, pentru a face un exemplu, dar pe poti uita la CA la Cursorschema - aici definesti campurile asa cum le vrei, in ordinea coloanelor returnate de select.

Daca nu ai mai lucrat cu un CA, cel mai simplu e sa folosesti builderul.

Instantiezi oApp si realizezi conexiunea la server.
Creezi o clasa CA, sa zicem catva, intr-o biblioteca test.vcx
In classdesigner, rightclick pe CA, builder, apoi
Ii definesti aliasul
La datasource type pui ODBCV. apoi selectezi Use existing connection handle.
In textbox puioApp.nConnhandle (numele corect)

Apoi treci la Data Access
Pui comanda select pe care o folosesti in sqlexec
Bifezi Use Cursor Schema, apoi Build
Daca oApp.nConnHandle e valid, builderul va executa selectul pe server, apoi va completa Cursor Schema cu maparea pe care o face VFP.
Modifici numele si tipul campurilor dupa dorinta.

Salvezi clasa, apoi instantiezi CA cu createobject, ai grija sa existe oApp.nConnhandle, apoi oCA.cursorFill
In cursorul cu aliasul pe care l-ai definit in builder trebuiie sa regasesti rezultatul selectului.

Poti folosi CA instantia din cclasa, sau poti copia codul generat de builder si iil instantiezi in cod.

Este variantab cea mai fiabila.

Tine cont, totusi, ca citez din memorie. Toate sansele sa mai fi uitat cate ceva.

Daniel Buduru
 6/23/2020 8:57:28 AM
User is offlineflorinbad
60 posts
https://www.turismcultural.ro




Re: rRe: Comanda SELECT SQL creeaza un FREE TABLE?
 (N/A)
Multumesc foarte mult!
  Visual FoxPro  Client/Server  Comanda SELECT ...

Search  Forum Home         

Copyright 2002-2013 Profox   Terms Of Use  Privacy Statement