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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2010, 19:00   #21
Nurlan77
 
Регистрация: 02.09.2009
Сообщений: 8
По умолчанию

Использую TADOQuery:

так добавляю:
Код:
  ADOQuery_Clients.Close;
  ADOQuery_Clients.SQL.Clear;
  ADOQuery_Clients.SQL.Text := 'SELECT * FROM [CLIENTS]';
  ADOQuery_Clients.Open;
  ADOQuery_Clients.Insert;
  ADOQuery_Clients.FieldByName('NAMES').AsString := Edit1.Text;
  ADOQuery_Clients.Post;
  ADOQuery_Clients.Close;
так изменяю:
Код:
  Q := 'UPDATE [CLIENTS] SET ' +
       '[CLIENTS].[NAMES]="' + Edit1.Text + '", ' + // тут стоит запятая потому что запрос поболее чем тут я выложил...
       'WHERE [CLIENTS].[ID]="' + sListView2.Items.Item[sListView2.ItemIndex].SubItems[21] + '"';

  ADOQuery_Clients.Close;
  ADOQuery_Clients.SQL.Clear;
  ADOQuery_Clients.SQL.Text := Q;
  ADOQuery_Clients.ExecSQL;
  ADOQuery_Clients.Close;
так удаляю:
Код:
  ADOQuery_Clients.Close;
  ADOQuery_Clients.SQL.Clear;
  ADOQuery_Clients.SQL.Text := 'DELETE * FROM [CLIENTS] WHERE [CLIENTS].[ID]="' + sListView2.Items.Item[sListView2.ItemIndex].SubItems[21] + '"';
  ADOQuery_Clients.ExecSQL;
при чем в последнем запросе на удаление я не задаю данные с кавычками ...там просто уже есть поле NAMES с кавычками и/или апострофами (тестировал)

Последний раз редактировалось Nurlan77; 07.06.2010 в 19:02.
Nurlan77 вне форума Ответить с цитированием
Старый 07.06.2010, 19:19   #22
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

В общем апострафы тут нужны только для текстовых значений, все вот эти ''' и '" можно заменить на Qutedstr то есть берём это
Код:
Q := 'UPDATE [CLIENTS] SET ' +
       '[CLIENTS].[NAMES]="' + Edit1.Text + '", ' + // тут стоит запятая потому что запрос поболее чем тут я выложил...
       'WHERE [CLIENTS].[ID]="' + sListView2.Items.Item[sListView2.ItemIndex].SubItems[21] + '"';
, и переписываем
Код:
Q := 'UPDATE [CLIENTS] SET ' +
       '[CLIENTS].[NAMES]=' + Quotedstr(Edit1.Text) + ', ' + // тут стоит запятая потому что запрос поболее чем тут я выложил...
       'WHERE [CLIENTS].[ID]="' + sListView2.Items.Item[sListView2.ItemIndex].SubItems[21] + '"';
а если делать нормально, то лучше использовать запросы с параметрами. Меньше путаницы с типами данных и нагляднее

то есть
Код:
 ADOQuery_Clients.Close;
  ADOQuery_Clients.SQL.Clear;
  ADOQuery_Clients.SQL.Text := 'UPDATE [CLIENTS] SET ' +
       '[CLIENTS].[NAMES] = :Name_, ' +// тут стоит запятая потому что 
запрос поболее чем тут я выложил...
       'WHERE [CLIENTS].[ID] = :id_;
 ADOQuery1.Parameters.ParamByName('name_').Value:= Edit1.Text;
 ADOQuery1.Parameters.ParamByName('id_').Value:= strtoint(sListView2.Items.Item[sListView2.ItemIndex].SubItems[21]);
//предположил что id всётаки integer
  ADOQuery_Clients.ExecSQL;
 // ADOQuery_Clients.Close; // лишнее
к остальным запросам это тоже относится

Цитата:
при чем в последнем запросе на удаление я не задаю данные с кавычками ...там просто уже есть поле NAMES с кавычками и/или апострофами (тестировал)
как связан запрос на удаление с полем NAMES не понял.. в условии поля нет
vovk вне форума Ответить с цитированием
Старый 07.06.2010, 19:27   #23
Nurlan77
 
Регистрация: 02.09.2009
Сообщений: 8
По умолчанию

Код:
//предположил что id всётаки integer
- там счетчик (код репликации)

Код:
как связан запрос на удаление с полем NAMES не понял.. в условии поля нет
-не знаю, но если поле NAMES или любое другое содержит кавычки или апострофы, то не удаляет

- как применить параметры к добавлению записи? я ведь использую это:
Код:
  ADOQuery_Clients.Insert;
  ADOQuery_Clients.FieldByName('NAMES').AsString := Edit1.Text;
  ADOQuery_Clients.Post;
тут не SQL запрос...

и еще в запросе добавления добавляет запись типа i don't know -(один апостроф) но потом и с параметрами не изменяет (проверил) и не удаляет
а если дать i don't" know - ошибка, при чем если и апостроф и кавычку сделать по две запишет - но именно по две запишет

Последний раз редактировалось Nurlan77; 07.06.2010 в 19:41.
Nurlan77 вне форума Ответить с цитированием
Старый 07.06.2010, 19:38   #24
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

я тут только про зпараметры в запросах говорил
Цитата:
а если делать нормально, то лучше использовать запросы с параметрами. Меньше путаницы с типами данных и нагляднее
ради интереса сделал табличку и проверил

Код:
var
i:Integer;
begin
i:= ADOQuery1.Fields.FieldByName('id').AsInteger;
ADOQuery1.Close;
ADOQuery1.SQL.Text:= 'delete from qq  WHERE id = :id_';
ADOQuery1.Parameters.ParamByName('id_').Value:=i;
ADOQuery1.ExecSQL;


значения одного из полей
Цитата:
2
2
rw
wrw
"[sdfksfksdj""kjkjsdf'ds]"
"[sdfksfksdj""kjkjsdf'ds]"
"""sfags']'''""
;'''df'fd'['
"fsdgdsgds"
''''''''''''''
[][][]][][][][]
как и ожидалось любая запись нормально удаляется

PS если код репликации, то скорее так
Код:
var
i:string;
begin
i:= ADOQuery1.Fields.FieldByName('id').AsString;
ADOQuery1.Close;
ADOQuery1.SQL.Text:= 'delete from qq  WHERE id = :id_';
ADOQuery1.Parameters.ParamByName('id_').Value:=i;
ADOQuery1.ExecSQL;

Последний раз редактировалось vovk; 07.06.2010 в 19:45.
vovk вне форума Ответить с цитированием
Старый 07.06.2010, 19:46   #25
Nurlan77
 
Регистрация: 02.09.2009
Сообщений: 8
По умолчанию

у меня счетчик имеет значение типа:
{E2564D47-32A8-420D-812B-9700F443AC89}

Код:
значения одного из полей
Цитата:
2
2
rw
wrw
"[sdfksfksdj""kjkjsdf'ds]"
"[sdfksfksdj""kjkjsdf'ds]"
"""sfags']'''""
;'''df'fd'['
"fsdgdsgds"
''''''''''''''
[][][]][][][][]
- это memo поле?
Nurlan77 вне форума Ответить с цитированием
Старый 07.06.2010, 19:47   #26
Nurlan77
 
Регистрация: 02.09.2009
Сообщений: 8
По умолчанию

у меня счетчик имеет значение типа:
{E2564D47-32A8-420D-812B-9700F443AC89}

Код:
значения одного из полей
Цитата:
2
2
rw
wrw
"[sdfksfksdj""kjkjsdf'ds]"
"[sdfksfksdj""kjkjsdf'ds]"
"""sfags']'''""
;'''df'fd'['
"fsdgdsgds"
''''''''''''''
[][][]][][][][]
- это memo поле?

Последний раз редактировалось Nurlan77; 07.06.2010 в 19:50.
Nurlan77 вне форума Ответить с цитированием
Старый 07.06.2010, 19:54   #27
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
- это memo поле?
нет текстовое поле, просто разные записи

Про код репликации я выше добавил сразу

Последний раз редактировалось vovk; 07.06.2010 в 20:04.
vovk вне форума Ответить с цитированием
Старый 07.06.2010, 20:13   #28
Nurlan77
 
Регистрация: 02.09.2009
Сообщений: 8
По умолчанию

to vovk
спасибо за направление...вроде с параметрами изменяет. удалять пока не пробовал.

а как задать таким образом sql запрос на добавление записи?
Nurlan77 вне форума Ответить с цитированием
Старый 07.06.2010, 20:26   #29
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

ТОчно также, в теле запроса после двоеточия параметр

Код:
ADOQuery1.Close;
ADOQuery1.SQL.Text:= 'INSERT INTO Table_name  (pole2,pole3) VALUES(:pole2_,:pole3_)';
ADOQuery1.Parameters.ParamByName('pole2_').Value:=edit1.Text;
ADOQuery1.Parameters.ParamByName('pole3_').Value:=strtoInt(edit2.Text);
ADOQuery1.ExecSQL;
vovk вне форума Ответить с цитированием
Старый 07.06.2010, 20:38   #30
Nurlan77
 
Регистрация: 02.09.2009
Сообщений: 8
По умолчанию

спасибо
Nurlan77 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с запросом с параметрами Альвента Microsoft Office Access 3 14.05.2010 09:46
Проблема с запросом! LizaVeta Общие вопросы Delphi 3 09.05.2010 07:07
Проблема с SQL запросом Bilargo БД в Delphi 4 27.11.2009 19:10
Помогите с запросом ADOQuery в Delphi 7 Wolverine БД в Delphi 21 25.05.2009 15:03
Проблема c запросом! SatS SQL, базы данных 6 24.01.2009 22:52