Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Вниз

Поиск по Query   Найти похожие ветки 

 
Q8   (2007-06-27 13:55) [0]

Здравствуйте мастера! Есть вопрос:
имеются DBGrid, DataSource, Query, button1 и два Edit"a. Подскажите пожалуйста, какими командами можно осуществить поиск в базе? Нужно, что бы введя в поле едит, и нажав на кнопку Button, осуществлялся поиск по определенному столбцую.Проблема в том, что это нужно сделать через SQL запрос, в чем я слабоват((.


 
Ega23 ©   (2007-06-27 13:57) [1]

Select * from Table where Column=Edit1.Text


 
ОН   (2007-06-27 13:57) [2]

With Query1 do begin
 close;
 Sql.Clear;
 Sql.Add("Select Столбец");
 Sql.Add("From Таблица");
 SQL.Add("Where Условие");
 open;
end;

Примерно так.


 
homm ©   (2007-06-27 13:59) [3]

> With Query1 do begin
> close;
> Sql.Clear;
> Sql.Add("Select Столбец");
> Sql.Add("From Таблица");
> SQL.Add("Where Условие");
> open;
> end;

Ужас. А по букву слабо?


 
Ega23 ©   (2007-06-27 14:01) [4]

Sql.Clear;
Sql.Add("Select Столбец");
Sql.Add("From Таблица");
SQL.Add("Where Условие");


Всё это заменяется на SQL.Text := "Select Столбец from Таблица where Условие";


 
ОН   (2007-06-27 14:02) [5]

Не, знаю, как ему, а вот мне нравится, когда отвечают подробно. Я же дотошный типс...


 
Ega23 ©   (2007-06-27 14:12) [6]


> Не, знаю, как ему, а вот мне нравится, когда отвечают подробно.
>  Я же дотошный типс...


Зачем до маразма-то доводить?

function ConvertBoolean(const Value : Boolean) : Boolean;
begin
 if Value=True then
  begin
    Result := False
  end
 else
  if Value=False then
   begin
     Result := True
   end
 else
   raise Exception.Create("Unknown boolean value!");
end;


 
ОН   (2007-06-27 14:18) [7]

Я наверное всех задолбал. Просто хочу быстрее закончить свою прогу и уйти на "пенсию", в отставку.


 
Q8   (2007-06-27 14:41) [8]

Спасибо за советы! Пойду пробовать!


 
Q8   (2007-06-27 15:13) [9]

Ну вот, попробовал)), в общем нужно кое-что уточнить:

SQL.Add("Where Условие"); можно тут подробней?
Я пишу так
With Query1 do begin
close;
Sql.Clear;
Sql.Add("Select *");
Sql.Add("From KSM_Base");
SQL.Add("Where FIO=Edit1.text");
open;


пишет Invalid Field name.text


 
Washington ©   (2007-06-27 15:16) [10]

SQL.Add("Where FIO="+Edit1.Text);


 
homm ©   (2007-06-27 15:16) [11]

> SQL.Add("Where FIO=Edit1.text");

SQL.Add("Where FIO="""+Edit1.text+"""");


 
homm ©   (2007-06-27 15:17) [12]

> [9] Q8   (27.06.07 15:13)

Скажи мне, откуда СУБД должна быть осведомлена что такое Edit1.text, для нее это набор символов. Тебе нужно значение, которое в Edit1.text лежит передать.


 
Q8   (2007-06-27 15:51) [13]

Ребята! Вы действительно мастера! Все получилось! Всем помагавшим огромный РЕСПЕКТ! Просьба к админам не закрывать топик, может возникнут еще какие-нибудь проблемы по тем....


 
Desdechado ©   (2007-06-27 15:59) [14]

> SQL.Add("Where FIO="""+Edit1.text+"""");
Ну-ну, впиши туда д"Артаньяна, я хочу на это посмотреть.


 
Q8   (2007-06-27 16:04) [15]

Опа! Еще вопрос! Имеется база с Фамилиями и инициалами(например Попов И.И., Попов А.Г.)Как сделать, что бы введя в Едит фамилию, без инициалов, программа находила всех однофамильцев?


 
homm ©   (2007-06-27 16:06) [16]

> Ну-ну, впиши туда д"Артаньяна, я хочу на это посмотреть.

Легко :)

Edit1.text := "д’Артаньян";
SQL.Add("Where FIO="""+Edit1.text+"""");


А вобше конечно ты прав, нужно так:

SQL.Add("Where FIO="""+str_replace("""", "\""", Edit1.text)+"""");

Обидно, блин, к [10] о не придрался :)


 
homm ©   (2007-06-27 16:07) [17]

> Опа! Еще вопрос! Имеется база с Фамилиями и инициалами(например
> Попов И.И., Попов А.Г.)Как сделать, что бы введя в Едит
> фамилию, без инициалов, программа находила всех однофамильцев?

Привести к первой нормальной форме. В друх словах это значит хранить инициалы отдельно от фамилии.


 
Anatoly Podgoretsky ©   (2007-06-27 16:14) [18]

> Q8  (27.06.2007 16:04:15)  [15]

Вопрос не по Дельфи


 
Плохиш ©   (2007-06-27 16:22) [19]

Прикольно, лигбез по основам sql :-)
Внесу и я свои пару строк из справки для > Q8   (27.06.07 16:04) [15]

LIKE-Prädikat
Zeigt die Ähnlichkeit eines Wertes mit einem Vergleichswert an.

Wert [NOT] LIKE [Jokerzeichen] Vergleichswert [Jokerzeichen] [ESCAPE Escape-Zeichen]

Beschreibung

Mit dem Vergleichsprädikat LIKE läßt sich eine Tabelle filtern, wobei nur diejenigen Werte in die Ergebnismenge aufgenommen werden, die einem Vergleichswert ähnlich sind. Die Verwendung von Jokerzeichen gibt Ihnen die Möglichkeit, den Vergleich anhand des ganzen Spaltenwerts oder nur anhand eines Teils davon durchzuführen.

SELECT *

FROM Customer

WHERE (Company LIKE "Adventure Undersea")

Das Jokerzeichen ("%") repräsentiert bei dem Vergleich eine unbekannte Anzahl von Zeichen. LIKE liefert TRUE, wenn derjenige Teil des Spaltenwertes mit dem Teil des Vergleichswertes übereinstimmt, der nicht der Position des Jokerzeichens entspricht. Letzteres kann am Anfang, in der Mitte oder am Ende des Vergleichswertes (oder auch mehrfach an verschiedenen Positionen) erscheinen. So liest die folgende Anweisung diejenigen Zeilen aus, bei denen der Spaltenwert mit "A" beginnt und dahinter eine beliebige Anzahl beliebiger Zeichen steht. Übereinstimmende Werte könnten "Action Club" und "Adventure Undersea" sein, nicht aber "Blue Sports".

SELECT *

FROM Customer

WHERE (Company LIKE "A%")

ну и т.д. там ещё много букав...


 
homm ©   (2007-06-27 16:23) [20]

> [19] Плохиш ©   (27.06.07 16:22)

Это че за каракули? :)
Еше бы на казахском привел (без обид).


 
Плохиш ©   (2007-06-27 16:23) [21]

Хотя, как же он без остального? Вот оно

Das Jokerzeichen "_" (Unterstrich) steht für ein beliebiges einzelnes Zeichen. LIKE liefert TRUE, wenn derjenige Teil des Spaltenwertes mit dem Teil des Vergleichswertes übereinstimmt, der nicht der Position des Unterstrichs entspricht. Dieses Jokerzeichen kann am Anfang, in der Mitte oder am Ende des Vergleichswertes (oder auch mehrfach an verschiedenen Positionen) erscheinen. Verwenden Sie den Unterstrich für jedes Zeichen, das im Filtermuster beliebig sein kann. So liest die folgende Anweisung diejenigen Zeilen aus, in denen der Spaltenwert mit "b" beginnt, mit "n" endet und dazwischen ein beliebiges Zeichen steht. Übereinstimmende Werte könnten "bin" und "ban", nicht aber "barn" sein:

SELECT Words

FROM Dictionary

WHERE (Words LIKE "b_n")

Mit NOT können Sie das Gegenteil eines LIKE-Vergleichs durchführen.

Verwenden Sie ESCAPE, wenn die Jokerzeichen "%" oder "_" als Spaltenwerte auftreten. Das Schlüsselwort ESCAPE bezeichnet ein Escape-Zeichen. Das im Vergleichswert auf das Escape-Zeichen folgende Zeichen wird dann als Datenzeichen behandelt und nicht als Jokerzeichen. Andere Jokerzeichen im Vergleichswert bleiben davon unberührt.

Im folgenden Beispiel wird das Zeichen "^" als Escape-Zeichen definiert. Im Vergleichswert für das Prädikat LIKE ("%10^%%") folgt "%" unmittelbar auf das Escape-Zeichen und wird in PercentValue als Datenzeichen behandelt. Dadurch kann die Tabelle anhand des Strings "10%" gefiltert werden.

SELECT *

FROM Sales

WHERE (PercentValue LIKE "%10^%%" ESCAPE "^")

LIKE kann nur auf den Datentyp CHAR oder kompatible Datentypen angewendet werden. Wenn ein Wert einen inkompatiblen Datentyp aufweist, wandeln Sie ihn mit Hilfe der Funktion CAST in einen kompatiblen Datentyp um. Bei LIKE-Vergleichen wird zwischen Groß- und Kleinbuchstaben unterschieden.


 
Плохиш ©   (2007-06-27 16:25) [22]


> homm ©   (27.06.07 16:23) [20]
> > [19] Плохиш ©   (27.06.07 16:22)
>
> Это че за каракули? :)

Это официальныя документация из дома борланд.

> Еше бы на казахском привел (без обид).

Уж, что имеем, то и даём :-)


 
Desdechado ©   (2007-06-27 16:26) [23]

> А вобше конечно ты прав, нужно так:
Снова шаманский бубен, а не решение.

Для этих целей используют параметры и только их.
Вот небольшая цитата из одной моей статейки:
Использование параметрических запросов
Использование параметров в запросах является правилом хорошего тона в программировании, поскольку имеет множество положительных аспектов:
- Улучшается читаемость и облегчается сопровождение кода программ.
- При циклических выполнениях запроса с разными параметрами есть возможность «подготовить» запрос на сервере один раз, после чего он выполняется быстрее без необходимости «подготовки» на каждой итерации.
- Исчезают ошибки, связанные с наличием апострофов, кавычек и неожиданных форматов дат внутри заданных пользователем текстовых строк в конструируемых «на лету» запросах.
- Запросы, «подготовленные» сервером, хранятся некоторое время в кэше. Параметрический запрос хорош в этом случае тем, что он подходит для любых значений параметров такого же запроса, тогда как непараметрический – только для точно такого же, включая заданные в его теле (а не в параметрах) значения. Поэтому при совпадении «подготовка» не проводится, что для параметрического запроса это случается гораздо чаще, чем для непараметрического.
- Непараметрические запросы тоже попадают в кэш, «выбивая» оттуда давно неиспользованные запросы (любого вида). Однако при большом потоке разнообразных запросов выбиваются и параметрические, которые имели шанс быть использованными далее, и заменяются непараметрическими, которые таких шансов не имеют. Это отрицательно сказывается на производительности сервера, т.к. ему приходится заново подготавливать параметрические запросы, уже «выбитые» из кэша.


 
homm ©   (2007-06-27 16:27) [24]

> Это официальныя документация из дома борланд.

С каких пор библии стали на немецком печатать? :))


 
pavel_guzhanov ©   (2007-06-27 16:28) [25]


> Как сделать, что бы введя в Едит фамилию, без инициалов,
>  программа находила всех однофамильцев?


SQL.Add("Where FIO like (:fio));
SQL.Params[0].value="%"+Edit1.text+"%";//Это если используешь Interbase
SQL.Parameters[0].value="%"+Edit1.text+"%";// Это если используешь ado


 
Плохиш ©   (2007-06-27 16:29) [26]


> С каких пор библии стали на немецком печатать?

А приведите закон о том на каком языке потребно библии печатать?


 
Плохиш ©   (2007-06-27 16:30) [27]


> SQL.Add(

А потом косяками вопросы ходют, типа этого http://delphimaster.net/view/2-1176793044/


 
homm ©   (2007-06-27 16:31) [28]

Счаз у афтора мозк вспухнет :)))


 
Игорь Шевченко ©   (2007-06-27 17:12) [29]

homm ©   (27.06.07 16:07) [17]


> Привести к первой нормальной форме. В друх словах это значит
> хранить инициалы отдельно от фамилии.


Ну и запросы у вас, сказала база данных.

Это называется привести к ненормальной форме и нажить геморроя себе на попу.


 
homm ©   (2007-06-27 17:15) [30]

> Это называется привести к ненормальной форме и нажить геморроя
> себе на попу.

Приехали. Почему это «ненормальная форма»? Я бы дальше пошел, при большем количестве строк, сделал бы таблицу имен, и вместо имени писал бы айдишник :)


 
Игорь Шевченко ©   (2007-06-27 17:18) [31]

homm ©   (27.06.07 17:15) [30]


> Я бы дальше пошел, при большем количестве строк, сделал
> бы таблицу имен, и вместо имени писал бы айдишник :)


Высшая степень паранойи :) Без обид.

У тебя что, имя отдельный независимый атрибут ? Ты его собираешься включать отдельно в выборку или использовать как самостоятельный критерий для выборки ? С инициалами в данном случае совсем интересно получается...


 
Johnmen ©   (2007-06-27 17:43) [32]


> ...//Это если используешь Interbase
> ...// Это если используешь ado

Э-э-э... А одновременно и Interbase и ado можно?


 
Правильный Вася   (2007-06-27 17:57) [33]


>  А одновременно и Interbase и ado можно?

конечно, даже с фотошопом и пончиком в зубах


 
Q8   (2007-06-27 19:11) [34]


> > Я бы дальше пошел, при большем количестве строк, сделал
>
> > бы таблицу имен, и вместо имени писал бы айдишник :)
>
>
> Высшая степень паранойи :) Без обид.
>
> У тебя что, имя отдельный независимый атрибут ? Ты его собираешься
> включать отдельно в выборку или использовать как самостоятельный
> критерий для выборки ? С инициалами в данном случае совсем
> интересно получается...


кстати, идея неплохая, сделать отдельную таблицу для имен, но ведь как то же можно сделать поиск что бы программа находила всех однофамильцев? Ну и кто тут самый мозговитый?


 
Правильный Вася   (2007-06-27 22:04) [35]


> Ну и кто тут самый мозговитый?

явно не ты, если даже данный ответ понять не можешь


 
pavel_guzhanov ©   (2007-06-28 10:09) [36]


> Э-э-э... А одновременно и Interbase и ado можно?

Можно.

Interbase в [25] - имелось ввиду компоненты с вкладки Interbase. От ado они синтаксисом отличаются, что я и показал в примере.

Автор в вопросе не указал, какая БД используется, поэтому я так и написал



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.038 c
11-1165408011
Don
2006-12-06 15:26
2007.07.22
ошибка в WndProcGradientEx


1-1179300822
Кирилл_А
2007-05-16 11:33
2007.07.22
Шрифт


1-1179295087
fishka
2007-05-16 09:58
2007.07.22
Снять выделение и установить курсор в позицию Combobox-а


3-1177048463
MZ
2007-04-20 09:54
2007.07.22
Фильтр в DBGridEh


4-1171368057
Larsik
2007-02-13 15:00
2007.07.22
Получение owner a файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский