Search  
Friday, March 05, 2021 ..:: 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  Cod, sintaxa si comenzi  INSERT SQL - pa...
 INSERT SQL - parametri specificati cu ?
 
 2/13/2006 4:45:10 PM
User is offlineGrigore Dolghin
4002 posts
www.class-software.ro
1st






INSERT SQL - parametri specificati cu ?
 (Romania)

Salutare

Dupa cum deja stiti, daca imi construiesc o variabila, apoi o folosesc intr-o comanda SQL, prefixata cu ?, stringul SQL contine valoarea variabilei. Aceasta este metoda prin care se transmit parametri catre serverele SQL, folosind SQLEXEC().

De vreo saptamana lucrez la un layer de abstractizare a accesului la date. Printre tipurile posibil de surse de date am si tabelele VFP. Well... suprize, suprize. ? nu merge in comenzi SQL care se adreseaza tabelelor VFP, desi exact aceeasi sintaxa merge perfect cu SQLEXEC.

Poate cineva sa-mi explice si mie ce se intampla? Imi scapa mie ceva? E documentat pe undeva? E un bug? Sunt eu tampit? Care-i adevarul?

In codul de mai jos, pasii 1, 2 si 3 merg bine (SELECT cu ? merge, respectiv INSERT cu varibla merge si el). Pasul 4 da eroare chiar din editor, iar pasul 5 da eroare la executie. Diferenta este ca in primele trei cazuri avem un SELECT, respectiv INSERT cu variabila, in celelalte cazuri un INSERT cu variabila prefixata. Daca inteleg eu bine, numai SELECT e compatibil, INSERT nu. Apropo, aceeasi poveste apare si la UPDATE, dar mesajul de eroare este diferit).

Are cineva vreo explicatie?

*----- Pregatire mediu. Igorati partea asta :) -----*
Set Safety Off
Set Exclusive On
On Error
Do Nothing

Create Table Test
( ;
   Id I
, ;
   
Nume C(20
), ;
   
Prenume C(20
))

Insert Into Test (Id, Nume, Prenume) Values (1, "AAA", "AAA"
)
Insert Into Test (Id, Nume, Prenume) Values (2, "BBB", "BBB"
)
Insert Into Test (Id, Nume, Prenume) Values (3, "CCC", "CCC"
)

*----- Select parametrizat. Parametrul este variabila insasi:
vpId =
2
Select * From Test Where Id = vpId Into Cursor
crsTest
Wait Window "Pasul 1. Apasa Escape"
Nowait
Browse Title
"SELECT SQL - Variabila ca parametru"
Use In
crsTest

*----- Select parametrizat. Parametrul e specificat cu ?
vpId = 2
Select * From Test Where Id = ?vpId Into Cursor
crsTest
Wait Window "Pasul 2. Apasa Escape"
Nowait
Browse Title
"SELECT SQL - Parametrul specificat cu ?"
Use In
crsTest

*----- Insert parametrizat. Parametrul este variabila insasi:
vpId =
4
Insert Into Test (Id, Nume, Prenume) Values (vpId, "DDD", "DDD"
)
Select
Test
Wait Window "Pasul 3. Apasa Escape"
Nowait
Browse Title
"INSERT SQL - Variabila ca parametru"

*----- Insert parametrizat. Parametrul este specificat cu ? si codul da eroare
*----- chiar din editor.
vpId =
5
Insert Into Test (Id, Nume, Prenume) Values (?vpId, "DDD", "DDD"
)
Select
Test
Wait Window "Pasul 4. Apasa Escape"
Nowait
Browse Title
"INSERT SQL - Parametru specificat cu ? => nu se executa"

*----- Insert parametrizat. Parametrul este specificat cu ? si codul da eroare:
vpId =
5
lcCommand =
[Insert Into Test (Id, Nume, Prenume) Values (?vpId, "DDD", "DDD")]
&
lcCommand
Select
Test
Wait Window "Pasul 5. Apasa Escape"
Nowait
Browse Title
"INSERT SQL - Parametru specificat cu ?, executat prin macrosubstitutie. Nu se executa."

*----- Restaurare ON ERROR
On Error


Procedure Nothing
*-- Ignorati aceasta procedura - intercepteaza erorile.
Return


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 2/13/2006 8:23:03 PM
User is offlineAdrianTufă
310 posts
3rd


Re: INSERT SQL - parametri specificati cu ?
 (Romania)

Foarte interesant, eu ma asteptam ca nici la SELECT sa nu mearga.
Am crezut ca ? e doar o sintaxa speciala a SQLEXEC pentru a insera variabile ale VFP in fraze SQL pentru server.

 2/14/2006 6:08:51 PM
User is offlinealexpote
61 posts


Re: INSERT SQL - parametri specificati cu ?
 (Romania)

Salut Grig,
Daca tot faci un data layer care sa functioneze si pe tabele VFP de ce nu folosesti drivere ODBC pentru vfp? Pare cam ciudat dar am auzit ca de multe ori functioneaza mai repede mai ales intr-o retea. In plus dispare si problema cu parametrul la insert. Chiar am verificat.
Numai bine,
Alex

 

 2/14/2006 11:33:50 PM
User is offlineGrigore Dolghin
4002 posts
www.class-software.ro
1st






Re: INSERT SQL - parametri specificati cu ?
 (Romania)

Um... motivul principal este ca driverul ODBC n-a mai fost actualizat de la VFP 6.0 incoace. Nu stie nimic despre ce-a aparut intre timp in VFP (de exemplu, Integer AutoInc).


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 2/15/2006 12:23:23 PM
User is offlineAdrianTufă
310 posts
3rd


Re: INSERT SQL - parametri specificati cu ?
 (Romania)
 alexpote wrote

Daca tot faci un data layer care sa functioneze si pe tabele VFP de ce nu folosesti drivere ODBC pentru vfp?

 2/15/2006 12:31:31 PM
User is offlineAdrianTufă
310 posts
3rd


Re: INSERT SQL - parametri specificati cu ?
 (Romania)
 alexpote wrote

Daca tot faci un data layer care sa functioneze si pe tabele VFP de ce nu folosesti drivere ODBC pentru vfp? Pare cam ciudat dar am auzit ca de multe ori functioneaza mai repede mai ales intr-o retea. In plus dispare si problema cu parametrul la insert.



Da, pare cam ciudat, dar cred ca rezolva problema crearii unui layer care sa lucreze si cu Servere SQL si cu dbf-uri.
Totusi, cred ca se pierde din performanta lucrului direct cu .dbf-uri. Cred ca depinde de aplicatie, ar trebui pus in balanta numarul de cazuri in care se utilizeaza .dbf si cel in care se utilizeaza servere SQL.
 2/15/2006 12:42:22 PM
User is offlineGrigore Dolghin
4002 posts
www.class-software.ro
1st






Re: INSERT SQL - parametri specificati cu ?
 (Romania)
Depinde de aplicatie, dar nu trebuie pus in balanta nimic. Solutia optima, dupa parerea mea, este sa ofer ambele variante, si programatorul sa-l aleaga pe cel pe care-l doreste.
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
  Visual FoxPro  Cod, sintaxa si comenzi  INSERT SQL - pa...

Search  Forum Home         

Copyright 2002-2013 Profox   Terms Of Use  Privacy Statement