Форум программистов CodeGuru
16 Январь 2018, 23:01:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Запросы...  (Прочитано 18164 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Arkuz
Интересующийся
**
Офлайн Офлайн

Сообщений: 13


Просмотр профиля
« : 04 Ноябрь 2008, 19:00:08 »

Привет...
Достало всё...
Проблема у меня с этим синтаксисом... В книгах одно пишут, на форумах по-другому говорят... Но у меня никак не получается...

Странно...
пишу вот так:
SQL.Text:='SELECT * FROM Readers WHERE (Name LIKE '+QuotedStr(FindEdit.Text+'%')+')';
Работает....
А в редактор пишу
SELECT * FROM Readers WHERE (Name LIKE '+QuotedStr(FindEdit.Text+'%')+')

не работает....

Запарился уже...

Помогите запрос сделать - наличие заданной книги (известен автор и название)

SELECT books.*, authors.Name FROM Books, Authors
WHERE Books.Name='+BookNameEdit.Text+'
AND Authors.Name='AuthorEdit.Text'

Колонки появляются, но ничего не находит... Не пойму я этот синтаксис... Точнее эти апострофы...

SELECT books.*, authors.Name FROM Books, Authors
WHERE Books.Name like '+QuotedStr(BookNameEdit.Text)+'
AND Authors.Name like '+QuotedStr(AuthorEdit.text)+'

тоже видно, что запрос выполняется, но ничего не выбирается....
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 04 Ноябрь 2008, 22:31:25 »

Лично я ничего не понял.
Что за СУБД используется.
Запрос то где выполняется, из какого средства, при помощи какой библиотеки, технологии ?
Записан

Arkuz
Интересующийся
**
Офлайн Офлайн

Сообщений: 13


Просмотр профиля
« Ответ #2 : 04 Ноябрь 2008, 23:11:06 »

Лично я ничего не понял.
Что за СУБД используется.
Запрос то где выполняется, из какого средства, при помощи какой библиотеки, технологии ?

Delphi, access, ado...

У меня не получается сделать запрос, где в условии нужно едит прописать... Со статическими данными всё работает...

SELECT books.*, authors.Name FROM Books, Authors
WHERE Books.Name='+BookNameEdit.Text+'
AND Authors.Name='AuthorEdit.Text'

Колонки появляются, но ничего не находит...

SELECT books.*, authors.Name FROM Books, Authors
WHERE Books.Name like '+QuotedStr(BookNameEdit.Text)+'
AND Authors.Name like '+QuotedStr(AuthorEdit.text)+'

Колонки появляются, но ничего не находит...

Ну а если что-то статичное поставить вместо едитов, работает замечательно...
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #3 : 05 Ноябрь 2008, 00:55:25 »

А... ясно.
Т.е. видимо, вот это

SELECT books.*, authors.Name FROM Books, Authors
WHERE Books.Name='+BookNameEdit.Text+'
AND Authors.Name='AuthorEdit.Text'
выглядит изначально так (в виде кода):
Код:
что-то := 'SELECT books.*, authors.Name FROM Books, Authors
WHERE Books.Name='+BookNameEdit.Text+'
AND Authors.Name=' + AuthorEdit.Text;
или по крайней мере должно выглядеть ?
Т.е. формируется строка запроса, в которую подставляются значения BookNameEdit.Text и AuthorEdit.Text ?

Если так, то, имхо, надо добавить в строку запроса еще кавычки ' ', в которые бы были заключены значения BookNameEdit.Text и AuthorEdit.Text. Я, честно говоря, не совсем помню, как в паскале в строке, обрамленной кавычками, записать кавычку. Возможно, так же как и в C - двумя кавычками.
Т.е. если это так, то можно строку запроса формировать как то так:
Код:
что-то := 'SELECT books.*, authors.Name FROM Books, Authors
WHERE Books.Name='''+BookNameEdit.Text+'''
AND Authors.Name=''' + AuthorEdit.Text + '''';

Возможно, на счет двойных кавычек я не прав. Но идея, думаю, понятна. Просто строка запроса должна быть корректна.

Кстати, в таких непонятных случаях можно выводить строку по которой есть сомнения либо в дебаггер, либо окном сообщения, хотя бы. Сразу будет понятно в чем проблема.
Записан

Arkuz
Интересующийся
**
Офлайн Офлайн

Сообщений: 13


Просмотр профиля
« Ответ #4 : 05 Ноябрь 2008, 02:03:59 »

я уже всё поперепробовал и QuotedStr, и напрямую вставлять эдит, и через переменную.
Ничего не получается...

Цитировать
Кстати, в таких непонятных случаях можно выводить строку по которой есть сомнения либо в дебаггер, либо окном сообщения, хотя бы. Сразу будет понятно в чем проблема.

А это как?
« Последнее редактирование: 05 Ноябрь 2008, 02:05:41 от Arkuz » Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #5 : 05 Ноябрь 2008, 22:44:20 »

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

Цитировать
Кстати, в таких непонятных случаях можно выводить строку по которой есть сомнения либо в дебаггер, либо окном сообщения, хотя бы. Сразу будет понятно в чем проблема.

А это как?

Ну, хотя бы (для начала) можно итоговую строку запихать в ShowMessage и посмотреть что там получается.
А вообще, насколько я понимаю, если использовать OutputDebugString (в качестве параметра также передается строка), то делфи будет показывать эти сообщения в своей панельке для отладки.
Записан

Arkuz
Интересующийся
**
Офлайн Офлайн

Сообщений: 13


Просмотр профиля
« Ответ #6 : 06 Ноябрь 2008, 00:09:51 »

Цитировать
OutputDebugString

Можно об этом подробнее?
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #7 : 06 Ноябрь 2008, 00:44:32 »

Ну... что тут поподробнее... Простая WinApi функция: OutputDebugString
Насколько я понимаю, в делфе она в windows.pas объявлена.

В качестве параметра принимает строку, которая и может впоследствии быть выведена дебаггером (если он активен).

Т.е. надо сформировать строку запроса и вызвать OutputDebugString, передав туда эту строку.
В делфе должна быть панель отладчика. Вот там и должна появитсья эта строка.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!