Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Наступил на очередные грабли


Страницы:   1 2

paul_k ©   (2006-05-30 13:47:00) 

Есть БД MSSQL 2000, SP 4
есть запрос
TmpSql:=TADOQuery.Create(nil);
TmpSql.Connection:=dm.ac_main;
dm.ac_main.Open;


текст запроса формируется в процесе исполнения.
TmpSql.SQL.Clear;
       TmpSql.SQL.Add('INSERT INTO tal_log_data(ip, log_date, log_time, metod, url, srv_resp, traf, referer, srv_name, br_full_str, br_type, br_version, site_name, file_ext)');
       TmpSql.SQL.Add('values(');
       TmpSql.SQL.Add(''''+StringGrid1.Cells[0,i]+''',');
       TmpSql.SQL.Add('convert(datetime,'''+StringGrid1.Cells[1,i]+''',106),');
              TmpSql.SQL.Add('convert(datetime,'''+StringGrid1.Cells[2,i]+''',108),');
       TmpSql.SQL.Add(''''+StringGrid1.Cells[3,i]+''',');
       TmpSql.SQL.Add(''''+StringGrid1.Cells[4,i]+''',');
       TmpSql.SQL.Add(StringGrid1.Cells[6,i]+',');
       TmpSql.SQL.Add(StringGrid1.Cells[7,i]+',');
       TmpSql.SQL.Add(''''+StringGrid1.Cells[8,i]+''',');
       TmpSql.SQL.Add(''''+StringGrid1.Cells[9,i]+''',');
       TmpSql.SQL.Add(''''+StringGrid1.Cells[10,i]+''',');
       TmpSql.SQL.Add(''''+StringGrid1.Cells[11,i]+''',');
       TmpSql.SQL.Add(''''+StringGrid1.Cells[12,i]+''',');
       TmpSql.SQL.Add(''''+StringGrid1.Cells[19,i]+''',');
       TmpSql.SQL.Add(''''+StringGrid1.Cells[20,i]+'''');
       TmpSql.SQL.Add(')');

с завидной регулярностью получаю
Parameter object is improperly defined. Inconsistent or incomplete information was provided
При этом из Аналайзера запрос выполняется на ура.
Текст запроса
INSERT INTO tal_log_data(ip, log_date, log_time, metod, url, srv_resp, traf, referer, srv_name, br_full_str, br_type, br_version, site_name, file_ext)
values(
'72.36.182.34',
convert(datetime,'30 Apr 2006',106),
convert(datetime,'14:29:57',108),
'GET',
'/link/\" http://vymp.ru\"',
404,
12957,
'-',
'',
'Goku/1.16 (Goku; http://goku.ru/bot.htm;bot@goku.ru)',
'Goku',
'1.16',
'flat-design.ru',
''
)

Собственно вопрос - в чем грабли себе закопал?


paul_k   (2006-05-31 14:47:00) [21]

С двоеточием понял, спасибо.
Вот только не понял как в строке
select * from XXX where YYY='Z:D'
это двоеточие внутри кавычек вылезет как параметр.
Ибо не наступал пока на эти грабли.

Остался вопрос о "любви и нелюбви" параметров.
В результате весь этот инсерт завернут в процедуру.
слеедовательно вопрос как и почему грамотнее писать
1. AdoStoredProc и параметры?
2. TAdoQuery прописывать строку exec proc_name @field1 = :param1...и заполнять параметры при необходимости?
3. TAdoQuery и перед вызовом ExecSql формировать строку exec proc_name @field1 = value1...?


ЮЮ   (2006-05-31 05:04:00) [22]

Если пользоваться параметрами принципиально не желаешь, то отключи ParamCheck у TmpSql, ибо когда в тексте запроса встречается символ : он интерпретируется как параметр


paul_k   (2006-05-30 14:24:00) [23]

> [4] Johnmen ©   (30.05.06 14:15)

двоеточия остались...  Ошибка не вылазит.
а что таки изменится? скорость работы вырастет?
Запрос все равно выносится в ХП. вместо insert ставится exec sp_add


> [5] evvcom ©   (30.05.06 14:17)

ещё раз повторю ты не мудри.. толком поясни да?
Запрос, кстати, меняется.


evvcom   (2006-05-30 14:17:00) [24]


> ты пальцем покажи

ну а через параметры не пробовал? И без постоянной перезаписи SQL. Он же, наверное, не меняется?


Johnmen   (2006-05-30 14:15:00) [25]


> paul_k ©   (30.05.06 14:12) [3]
> > [1] Johnmen ©   (30.05.06 14:01)
> А что это изменит?


Всё и радикально!
Кстати, ошибка у тебя была из-за наличия : в склеиваемых строках. Да ещё и кавычки, как содержимое...


paul_k   (2006-05-30 14:12:00) [26]

> [1] Johnmen ©   (30.05.06 14:01)

А что это изменит?
ну кину на форму запрос передам ей эту радость в качестве параметров а что изменится то?
кстати убрал кавычки в
  '/link/\" http://vymp.ru\"',
эта абшибка исчезла.
Но все равно не понятно Аналайзер запрос кушает а дельвя - нет

> [2] evvcom ©   (30.05.06 14:04)
> Блин, любители динамических граблей!

ты это, не мудри ты пальцем покажи


evvcom   (2006-05-30 14:04:00) [27]

Блин, любители динамических граблей!


Johnmen   (2006-05-30 14:01:00) [28]

Вот и надо использовать упомянутые параметры. В запросе....


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо