![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка при записи в БД (ругань на ';' в конце строки) [D6, MySQL]
vegarulez © (2007-06-23 21:30:00)Привет всем мастерам!
У меня какая-то ерунда творится... и не могу понять в чём дело...
Вообщем есть файл в котором есть sql скрипты... и я хочу их автоматически пропинывать посредством Дэлфа в бд... для этого пользую Zconnection + ZQuery (ZeosDBO) + база мускл 3.23, на локалхосте... пытаюсь пропнуть дамп из файлика *.sql (текстовичок)...
так вот... создал дамп одной таблички с данными, там строк 500... так вот в конце каждой строки стоит символ точка с запятой ";"... вообщем всё сделал всё работает...
Создаю дамп ещё одной таблички и запихиваю в текстовичок...
и тут начинаются чудеса...
в той табличке 2 записи... собственно: крит табле... + 1 запись, то бишь 1 инзерт...
так вот моя прожка ругается на то что в конце этих строк стоит ";"... я в шоке.... убираю ; в конце этих строк... при том что в остальных 500, с которыми раньше всё отладил и всё работало символ ";" остаётся.... запускаю - всё работает...
Я что-то не понимаю... толи у меня моск перегрелся, толи на марсе погода плохая.... потому как строки идентичны, тока записи разные втыкаются... сами данные...
помогите порыться, где собака порылась...
Пример Текстовичка
CREATE TABLE `configs` (`ID` int(10) unsigned NOT NULL auto_increment,`check_id` int(10) unsigned NOT NULL default '0',`mail_id` int(10) unsigned NOT NULL default '0',`up_id` int(11) unsigned NOT NULL default '0', PRIMARY KEY (`ID`)) TYPE=MyISAM
INSERT INTO `configs` VALUES (1, 391, 3, 0)
CREATE TABLE `Megafon_codes` (`ID` int(10) unsigned NOT NULL auto_increment,`ep_code` varchar(5) NOT NULL default '',`meg_code` char(3) NOT NULL default '',`meg_zone` varchar(32) NOT NULL default '',`meg_area` varchar(50) NOT NULL default '',`fcode` bigint(20) unsigned NOT NULL default '0',`ecode` bigint(20) unsigned NOT NULL default '0', `updt` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`ID`)) TYPE=MyISAM;
INSERT INTO `Megafon_codes` VALUES (1, '', '925', 'Мегафон-Москва', 'Область в РФ', 0, 0, '2007-05-14 13:34:12');
INSERT INTO `Megafon_codes` VALUES (2, '', '926', 'Мегафон-Москва', 'Область в РФ', 0, 0, '2007-05-14 13:34:12');
INSERT INTO `Megafon_codes` VALUES (3, '', '921', 'Мегафон-Северо Запад', 'Область в РФ', 0, 0, '2007-05-14 13:34:12');
INSERT INTO `Megafon_codes` VALUES (4, '', '922', 'Мегафон-Урал', 'Область в РФ', 0, 0, '2007-05-14 13:34:12');
INSERT INTO `Megafon_codes` VALUES (5, '', '923', 'Мегафон-Сибирь', 'Область в РФ', 0, 0, '2007-05-14 13:34:12');
INSERT INTO `Megafon_codes` VALUES (6, '', '922', 'Мегафон-Поволжье', 'Область в РФ', 0, 0, '2007-05-14 13:34:12');
и т.д.....
INSERT INTO `Megafon_codes` VALUES (...);
Мой Код
...
procedure ReadTxt;
var
f: TextFile;
num_lines, x: integer;
s,line: string;
begin
x:=0;
assign(f, 'up.sql');
reset(f);
while not eof(f) do
begin
inc(x);
ReadLn(f, s);
line:=s;
with Form1.ZQuery1 do
Try
if Active then Close;
Sql.Text:=s;
Form1.ZQuery1.ExecSQL();
except
on E: Exception do Application.MessageBox(Pchar(E.Message),PChar('Error'), MB_OK);
End;
Form1.StatusBar1.Panels[1].Text:=inttostr(x);
Application.ProcessMessages;
end;
//try
//except on E:Exception do Application.MessageBox(PChar('Error'), Pchar(E.Message), MB_OK);
//End;
close(f);
end;
procedure TForm1.N3Click(Sender: TObject);
begin
ReadTxt();
end;
Desdechado (2007-06-25 11:11:00) [1]Посмотри в своем текстовичке, чем отделены строки между собой (и есть ли разница между "нормальными" строками и "ненормальными").
Я как-то на Оракле сутки бился, пока поймал, что в EXECUTE IMMEDIATE не должно быть символов с кодом #13, допустим только #10.
sniknik (2007-06-24 19:40:00) [2]> Логичен вопрос - почему?...
нелогичный ответ... попробуй имя таблицы поменять с "configs" на чтонибудь менее похожее на зарезервированное слово. чем гейтс не шутит.
vegarulez (2007-06-24 19:03:00) [3]А попдробнее... плз...
Просто хочу понять , почему 500 запросов проходят успешно, без ругани... а эти 2.... ругань... они же идентичны... практически.... тока другой табл создаётся и другая запись туда инзертится... а так - они идентичны...
Если взять во внимание ваш диалог выше, то из этого можно заключить, что и на эти 500 запросов он должен ругаться... т.к. там есть точка с запятой...
Но этого не происходит....
Логичен вопрос - почему?...
Anatoly Podgoretsky (2007-06-24 16:19:00) [4]> Плохиш (24.06.2007 16:10:04) [4]
А в компанентах просто, заранее известен конец запроса, когда его можно исполнять, это может быть и пакет. Передается как целое серверу с приказом исполнить. В терминалах такой возможности нет.
А то что один или другой компанент (или даже сервер) не выносит на дух, то что является стандартом - их не красит.
Плохиш (2007-06-24 16:10:00) [5]
> Anatoly Podgoretsky © (24.06.07 13:22) [3]
> > Плохиш (24.06.2007 00:48:02) [2]
>
> В SQL-72
Ну подловил :-)
А в кАмпАнентах стали выполнять по одному запросу...
Anatoly Podgoretsky (2007-06-24 13:22:00) [6]> Плохиш (24.06.2007 00:48:02) [2]
В SQL-72
Если вспомнишь как развивалась техника, которая и сейчас практически такая же - это терминалы, так вот как ты определишь конец запроса без спецсимвола?
Плохиш (2007-06-24 00:48:00) [7]
> Ошибка при записи в БД (ругань на ';' в конце строки)
А в каком стандарте SQL строка должна оканчиваться ';'?
Johnmen (2007-06-24 00:13:00) [8]Везде убери ; и забей...