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

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

Ошибка при записи в БД (ругань на ';' в конце строки) [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]

Везде убери ; и забей...


Наверх

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