Search  
Friday, May 25, 2012 ..:: 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  DELETED() in cl...
 DELETED() in clauza WHERE in SQL
 
 6/19/2006 12:48:03 PM
User is offlineworky
18 posts


DELETED() in clauza WHERE in SQL
 (Romania)
Salut!

M-am lovit de o chestie pe care nu o pot explica:

In VFP 6, SP 4, am scris o interogare de genul:

SELECT * FROM miscari WHERE !DELETED() AND idmisc IN (SELECT idmisc FROM bonlans WHERE DELETED())

Spre surpriza mea, a returnat zero inregistrari. In schimb, scriind sub forma:

SELECT * FROM miscari WHERE !DELETED() AND idmisc IN (SELECT idmisc FROM bonlans HAVING DELETED())

a returnat numarul corect de inregistrari (cel putin asa sper :) ).

Nedumerirea mea devine si mai mare cand stiu ca filtrele plasate in clauza HAVING se aplica setului rezultat de date si, in plus, SELECT anuleaza marcajul de stergere a inregistrarilor din setul rezultat.

Bineinteles, scriind doua SELECT-uri subsecvente, avand filtrul DELETED() in clauza WHERE, functioneaza normal. Sunt curios daca poate cineva sa ofere o explicatie la aceasta comportare.

Cornel
 6/19/2006 1:08:06 PM
User is offlineedyshor
1450 posts
1st




Re: DELETED() in clauza WHERE in SQL
 (Romania)
pai sa vedem .. in prima tu incerci sa intorici inregistrarile care nu sunt sterse si au idmisc=.t. dintr-un recordset care contine numai inregistrari sterse ?! (sau n-am citit eu bine /:))
 
la faza cu having nu prea stiu nimic :)
 6/19/2006 1:29:52 PM
User is offlineworky
18 posts


Re: DELETED() in clauza WHERE in SQL
 (Romania)
Am doua tabele, MISCARI si BONLANS, relationate prin campul IDMISC (cheie primara in MISCARI si cheie straina in BONLANS). Din anumite motive (nu mi-am dat seama inca de ce), au fost sterse niste inregistrari din BONLANS dar nu au fost sterse si inregistrarile corespunzatoare din MISCARI si SELECT-ul de sus determina inregistrarile respective din MISCARI.

Intrebarea este de ce primul SELECT nu functioneaza corect (returneaza zero inregistrari). SET DELETED este OFF.

 6/19/2006 2:22:30 PM
User is offlineDanTodor
297 posts
4th


Re: DELETED() in clauza WHERE in SQL
 (Romania)
Ai incercat numai subselect-ul singur, cu cele doua clauze, sa vezi daca exista diferente ?
 6/19/2006 2:46:23 PM
User is offlineworky
18 posts


Re: DELETED() in clauza WHERE in SQL
 (Romania)
Da, si aparent nu exista diferente. Cel putin returneaza acelasi numar de inregistrari.
 6/19/2006 5:33:46 PM
User is offlineDanTodor
297 posts
4th


Re: DELETED() in clauza WHERE in SQL
 (Romania)
Si dupa aia si select-ul mare doar cu clauza IN ? fara !deleted() ?
 6/19/2006 7:00:54 PM
User is offlinewtfia
142 posts
5th


Re: DELETED() in clauza WHERE in SQL
 (N/A) Modified By wtfia  on 6/19/2006 7:14:39 PM)
 SELECT * FROM miscari WHERE !DELETED() AND idmisc IN (SELECT idmisc FROM bonlans WHERE DELETED())


SELECT * FROM miscari WHERE !DELETED('miscari') AND idmisc IN (SELECT idmisc FROM bonlans WHERE DELETED('bonlans'))

Asta merge ?

EDIT: Parca era o avertizare pe undeva, dar nu o mai gasesc. Suna ceva de genul 'niciodata sa nu faci presupuneri in legatura cu zona de lucru care e selectata in interiorul unui SELCT - SQL'. Tu ai folosit DELETED(). Asta presupune zona de lucru curenta, dar in zona de lucru curenta in momentul in care evalueaza filtrul ar putea sa fie un set/cursor temporar. S-ar putea sa fie asta greseala. Poate functioneaza daca ii spui clar la ce baza te referi.
 6/20/2006 9:22:39 AM
User is offlineworky
18 posts


Re: DELETED() in clauza WHERE in SQL
 (Romania)
 wtfia wrote


Parca era o avertizare pe undeva, dar nu o mai gasesc. Suna ceva de genul 'niciodata sa nu faci presupuneri in legatura cu zona de lucru care e selectata in interiorul unui SELCT - SQL'. Tu ai folosit DELETED(). Asta presupune zona de lucru curenta, dar in zona de lucru curenta in momentul in care evalueaza filtrul ar putea sa fie un set/cursor temporar. S-ar putea sa fie asta greseala. Poate functioneaza daca ii spui clar la ce baza te referi.


Intr-adevar, asta este explicatia. Eu am considerat ca Fox-ul e destul de destept, a.i. sa "stie" ca DELETED() din SELECT-ul secundar se refera la BONLANS si nu la zona de lucru curenta.

Referitor la SELECT-ul in care ii specific tabelele in functiile DELETED(), functioneaza aberant: returneaza cca. 58.000 inregistrari fata de 10, cat este corect!!!


Oricum, multumesc pentru idei!
  Visual FoxPro  Cod, sintaxa si comenzi  DELETED() in cl...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement