Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2010, 12:37   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию Ошибка: "Ошибка синтаксиса"

Добрый день! Воюю с ошибкой. Не могу ее победить. По нажатию клавиши Enter должен выполниться запрос:
Код:
procedure TForm1.JvDBSearchEdit1KeyPress(Sender: TObject; var Key: Char);
begin
 if Key = #13 then
 begin
  Form1.ADOQuery1.Active:=False;
  Form1.ADOQuery1.SQL.Text:='select * from export where Number contract=' + Form1.JvDBSearchEdit1.Text;
  Form1.ADOQuery1.Active:=True;
  Form1.DataSource1.DataSet:=Form1.ADOQuery1;
 end;
end;
но выдается ошибка:

Ошибка синтаксиса (пропущен оператор) в выражении запроса 'Number contract=2890982'

Прошу помочь разобраться.

----
чуть позже выяснил, что ошибка возникает из-за того, что в имени поля присутствует пробел. Как можно обработать этот момент, чтобы ошибка не возникала?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 10.10.2010 в 13:39.
artemavd вне форума Ответить с цитированием
Старый 10.10.2010, 13:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Number contract
Это имя поля? тогда ограниць его брекетами или ковычками
Код:
Form1.ADOQuery1.SQL.Text:='select * from export where [Number contract]=' + Form1.JvDBSearchEdit1.Text;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.10.2010, 13:44   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Неа, не работает. Поставил эти брекеты так:
Код:
procedure TForm1.JvDBSearchEdit1KeyPress(Sender: TObject; var Key: Char);
begin
 if Key = #13 then
 begin
  Form1.ADOQuery1.Active:=False;
  Form1.ADOQuery1.SQL.Text:='select * from export where [Number contract]=' + Form1.JvDBSearchEdit1.Text;
  Form1.ADOQuery1.Active:=True;
  Form1.DataSource1.DataSet:=Form1.ADOQuery1;
 end;
end;
а еще у меня не получается занести все значения из столбца БД в ComboBox. Из-за того, что в имени колонки есть пробел. С другими полями все заносится. Вот код:
Код:
procedure TForm1.BtnRefreshClick(Sender: TObject);
begin
 Form1.ADOQuery1.Close;
 Form1.ADOQuery1.SQL.Clear;
 Form1.ADOQuery1.SQL.Text:='select distinct [Number contract] from export';
 Form1.ADOQuery1.Open;
 Form1.ComboBox1.Clear;
 Form1.ADOQuery1.First;
 while not Form1.ADOQuery1.Eof do
 begin
  Form1.ComboBox1.Items.Add(Form1.ADOQuery1.FieldByName('[Number contract]').AsString);
  Form1.ADOQuery1.Next;
 end;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 10.10.2010 в 13:47.
artemavd вне форума Ответить с цитированием
Старый 10.10.2010, 13:53   #4
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

А пробелы в принципе не рекомендуется ставить.... переименуй на знак "_"
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 10.10.2010, 14:19   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Это не я делал такие поля. Этот файл БД получается после работы другой программы и создается автоматически. Что подскажете по сабжу в посте №3?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 10.10.2010, 14:32   #6
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Я сам когда-то с пробелами боролся, но так и не нашел решения, только убрал их из названий (таблиц и полей).
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 10.10.2010, 14:48   #7
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

есть подозрение, что должен прокатить такой вариант
Код:
"Number contract"
или такой
Код:
["Number contract"]
soleil@mmc вне форума Ответить с цитированием
Старый 10.10.2010, 14:56   #8
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Неа, не работает. Код:
Код:
procedure TForm1.BtnRefreshClick(Sender: TObject);
begin
 Form1.ADOQuery1.Close;
 Form1.ADOQuery1.SQL.Clear;
 Form1.ADOQuery1.SQL.Text:='select distinct "Number contract" from export';
 Form1.ADOQuery1.Open;
 Form1.ComboBox1.Clear;
 Form1.ADOQuery1.First;
 while not Form1.ADOQuery1.Eof do
 begin
  Form1.ComboBox1.Items.Add(Form1.ADOQuery1.FieldByName('Number contract').AsString);
  Form1.ADOQuery1.Next;
 end;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 10.10.2010, 15:01   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что за СУБД? Можешь показать структуру таблицы? Желательно скриптом, сгенерированным самой СУБД
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.10.2010, 15:26   #10
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Неа, не работает. Код:
Код:
procedure TForm1.BtnRefreshClick(Sender: TObject);
begin
 Form1.ADOQuery1.Close;
 Form1.ADOQuery1.SQL.Clear;
 Form1.ADOQuery1.SQL.Text:='select distinct "Number contract" from export';
 Form1.ADOQuery1.Open;
 Form1.ComboBox1.Clear;
 Form1.ADOQuery1.First;
 while not Form1.ADOQuery1.Eof do
 begin
  Form1.ComboBox1.Items.Add(Form1.ADOQuery1.FieldByName('Number contract').AsString);
  Form1.ADOQuery1.Next;
 end;
end;
Может можно написать какую-нибудь процедурку, которая бы меняла в названии полей пробелы на "_"? Кто-нибудь знает такую процедуру?

Список полей во вложении...
Изображения
Тип файла: png Безымянный.png (11.3 Кб, 23 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
"Синтаксическая ошибка " или " в чём разница?" vedro-compota PHP 7 07.08.2010 16:45
Ошибка "Acces violation" в чем может быть причина TRIZER Общие вопросы Delphi 2 02.05.2010 12:10
1>Проект : error PRJ0003 : Ошибка при создании "cl.exe". ben95 Помощь студентам 1 14.05.2009 17:10
Delphi 7. Ошибка "ADODataSet1: Cannot perform this operation on a closed dataset" Vind Помощь студентам 6 20.04.2009 22:47
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder AleksP C++ Builder 7 11.04.2009 13:06