SQL

3 отговора 156 прегледа
#1

SQL

Niakoi moje li da mi dade ideia ili da me naso4i kak moga da si napi6a query?
Query-to mi izglejda po tozi na4in i 4erpi danni ot Form s dva text box-a.
ISKAM da raboti Query-to i kogato e popalnena informacia samo v edinia textbox

SELECT Table.name,Table.phone
FROM Table
WHERE Table.name=Forms!Form!(textbox1) AND Table.phone=Forms!Form!(textbox2) ;

Отговор
в отговор на Lubitel #2

Ми то SQL не съдържа FORM!

Поне аз до сега не съм виждал SQL стандарт да съдържа думата FORM.
Можеш просто да провериш преди да генерираш query какво да бъде query'то.
Аз лично си правя винаги някаква логика преди да се обърна към BD която логика генерира необходимото query.
Тоест имам един char SQL[2048]; и генерирам в него такова съдържание каквото е необходимо според случая.

Отговор
в отговор на Lubitel #3

Re: SQL

Става въпрос за MS Access, нали?

Заявката трябва да бъде така, при два критерия за търсене:


SELECT Table.name,Table.phone
FROM Table
WHERE
(Nz(Forms!Form![textbox1])<>""
OR
Nz(Forms!Form![textbox2])<>"")
AND
(Table.name=Forms!Form![textbox1])
AND
(Table.phone=Forms!Form![textbox2]);


Тук, както и при долните примери е зададено условието да не се връщат записи, ако са празни всички кутии с критериите за търсене.

Ако кутиите с критериите за търсене са повече от две, ще е уместно да се избегнат попадения, предизвикани от празни полета в някои записи. Ще илюстрирам модификацията на заявката за два критерия, не е трудно да се съобрази, как трябва да бъде за повече от два:


SELECT Table.name,Table.phone
FROM Table
WHERE
(Nz(Forms!Form![textbox1])<>""
OR
Nz(Forms!Form![textbox2])<>"")
AND
IIf(Nz(Forms!Form![textbox1])<>"", Table.name=Forms!Form![textbox1], True)
AND
IIf(Nz(Forms!Form![textbox2])<>"", Table.phone=Forms!Form![textbox2], True);


Горния пример го дадох наизуст, не съм го пробвал - опитай ти.

Може да е по-удобно да се търси по частично въведени тектове в две или повече текстови кутии. Тогава вместо сравняване на низове трябва да се използва оператора LIKE. Ето как:


SELECT Table.name,Table.phone
FROM Table
WHERE
(Nz(Forms!Form![textbox1])<>""
OR
Nz(Forms!Form![textbox2])<>"")
AND
Table.name LIKE IIf(Nz(Forms!Form![textbox1])<>"","*" & Forms!Form![textbox1] & "*", "*")
AND
Table.phone LIKE IIf(Nz(Forms!Form![textbox2])<>"","*" & Forms!Form![textbox2] & "*", "*");


Вярно е, че заявките са тежички, но не съм измислил начин да ги направя по-ефективни.

Успех!


Отговор
в отговор на Lubitel #4

Re: SQL

Za Access stava duma.
Thanks!

Отговор