Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Неизвестная ошибка  (Прочитано 18026 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« : 07-08-2007 08:45 » 

У меня проблема с прогой при добавлении записей с помощью SQL-запроса в базу данных MS Access, я не пойму почему но при попытке добаления 61-ти или более записей, добавляется только 60, а затем выдается соосбщение об неизвестной ошибке?
Записан

Знаешь мало - поучись, знаешь много - поделись.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 07-08-2007 08:55 » 

тут скорее ничто не связано с числом 60 или 61, а скорее связано  с размером буфера отката в компоненте работы с базой.
можно попробывать вставлять более маленькие строки
insert into table  (nom, name) VALUES('1', 'Что-то');
и так далее
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 07-08-2007 09:03 » 

Sla, у меня проблема не с длиной строки а с количеством оных, более 60-ти не добавляется
Записан

Знаешь мало - поучись, знаешь много - поделись.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 07-08-2007 09:18 » 

а я не про длину строки, а про размер буфера
т.е. в моем примере , например, в буфре 2к для 61 записей
в твоем случае при 61 записи 6,1 к, а для 60 - 6к
 
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 07-08-2007 09:20 » 

но может оказаться, что действительно вставляются только 60 записей - тогда смотреть компонент
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 07-08-2007 10:02 » 

как можно это побороть я использую TADOQuery
Записан

Знаешь мало - поучись, знаешь много - поделись.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 07-08-2007 10:05 » 

так я тебе уже предложил Улыбаюсь

insert into table  (nom, name) VALUES('1', 'Что-то');
и так более 60 раз

какой запрос ты используешь на вставку?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 07-08-2007 10:15 » 

ну примерно так выглядят все запросы
Записан

Знаешь мало - поучись, знаешь много - поделись.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 07-08-2007 10:37 » 

insert into 91 values
       ('1','2','', далее все пустое),
       ('2','2','', далее все пустое),
и таких строк 60 и более
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 07-08-2007 10:52 » 

да, но ведь это будут уже две строки а мне нужно добавлять в некоторых случаях до 30-ти записей в строку. или я что-то не догоняю?
Записан

Знаешь мало - поучись, знаешь много - поделись.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 07-08-2007 11:07 » 

не догоняешь Улыбаюсь

insert into 91 values
       ('1','2','', далее все пустое),
       ('2','2','', далее все пустое),
       ('3','2','', далее все пустое),
           . . . . . . . . . .
       ('62','2','', далее все пустое)
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 07-08-2007 11:10 » 

в строку ты добавляешь значения
в приведенном мною примере ты добавляешь только два значения в       60 и более строк
ты же SQL - строку формируешь?

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 07-08-2007 12:53 » 

ты же SQL - строку формируешь?
да
вот так примерно должен по твоему выглядеть?
Записан

Знаешь мало - поучись, знаешь много - поделись.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 07-08-2007 12:57 » 

да
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 07-08-2007 13:00 » 

почему тогда он пишет что ошибка в синтаксисе?
Записан

Знаешь мало - поучись, знаешь много - поделись.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 07-08-2007 13:30 » 

ymhuk, из тебя нужно все клещами вытягивать Улыбаюсь
дай строку, ТЕКСТОВУЮ, которую ты подставляешь в SQL string
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 07-08-2007 14:38 » 

Ты верно это подметил Ага - я такой по жизни

Вот строка которая получилась у меня использую твой совет:

INSERT INTO 999 Values ('01,1','03','18210606013100000110','53203834000','01','','','1239,00','32,97','','','412,97','',''), ('15,41,2','01','18210906010020000110','53203834000','01','','','','','','','','-1,12',''), ('15,41,2','01','18210906010020000110','53203834000','01','','','','','','','','-1,12',''), ('15,41,2','01','18210906010020000110','53203834000','01','','','','','','','','-1,12',''), ('52,62','03','18210601030100000110','53203834000','01','','','','','','','','-0,09',''), ('52,62','03','18210601030100000110','53203834000','01','','','','','','','','-0,09',''), ('01,1','01','18210907030050000110','53203834000','01','','','','','','','','','-100,00'), ('01,1','02','18210503000010000110','53203834000','01','1,00','0,01','','','1080,00','','1079,00','-0,01',''), ('0','03','18210606013100000110','53203834000','01','12,00','0,82','','','','24,01','','-0,82',''), ('0','01','18210503000010000110','53203834000','01','','0,14','','','13,00','','','-0,29',''), ('0','03','18210606013100000110','53203834000','01','6,46','','','','','','','',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,04',''), ('52,62','02','18210502000020000110','53203834000','01','256,00','2,85','','0,02','','125,00','','-13,63',''), ('52,62','03','18210601030100000110','53203834000','01','','','','','','','','-0,10',''), ('0','03','18210606013100000110','53203834000','01','13,72','','','','','','','',''), ('0','03','18210606013100000110','53203834000','01','9,26','0,11','','','','','','-0,11',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,33',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,03',''), ('0','03','18210606013100000110','53203834000','01','10,63','','','','','','','',''), ('0','03','18210606013100000110','53203834000','01','15,09','','','','','','','',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,24',''), ('0','03','18210606013100000110','53203834000','01','26,75','','','','','','','',''), ('0','03','18210601030100000110','53203834000','01','','0,83','','','','23,65','','-1,56',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,34',''), ('0','03','18210606013100000110','53203834000','01','9,67','','','','','','','',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,02',''), ('0','03','18210601030100000110','53203834000','01','','0,98','','0,01','','30,47','','-1,89',''), ('0','03','18210606013100000110','53203834000','01','10,15','0,73','','','','20,30','','-0,73',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,23',''), ('52,62','02','18210502000020000110','53203834000','01','','','','','','0,40','','-36,57',''), ('52,62','03','18210601030100000110','53203834000','01','','','','','','','','-0,20',''), ('0','09','18210601030100000110','53203834000','01','','','','','','','','-0,07',''), ('0','09','18210606013100000110','53203834000','01','7,54','','','','','','','',''), ('0','03','18210601030100000110','53203834000','01','','0,41','','','','11,44','','-0,65',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,13',''), ('0','03','18210606013100000110','53203834000','01','10,97','','','','','','','',''), ('0','03','18210606013100000110','53203834000','01','5,07','','','','','','','',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,13',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,19',''), ('0','03','18210606013100000110','53203834000','01','9,44','','','','','','','',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,04',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,08',''), ('0','03','18210601030100000110','53203834000','01','','0,65','','0,02','','17,69','','-1,26',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,10',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,20',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,48',''), ('0','03','18210606013100000110','53203834000','01','4,57','0,35','','','','9,15','','-0,35',''), ('0','03','18210601030100000110','53203834000','01','','0,44','','0,01','','12,81','','-0,70',''), ('0','03','18210606013100000110','53203834000','01','17,83','','','','','','','',''), ('0','01','18210102021010000110','53203834000','02','','35,61','','0,20','','','','-440,35',''), ('0','03','18210502000020000110','53203834000','01','','','','','','','227,00','',''), ('0','03','18210601030100000110','53203834000','01','','0,40','','0,01','','11,02','','-0,63',''), ('0','03','18210606013100000110','53203834000','01','6,86','0,45','','','','13,72','','-0,45',''), ('0','03','18210606013100000110','53203834000','01','11,32','0,11','','','','','','-0,11',''), ('0','03','18210606013100000110','53203834000','01','8,57','','','','','','','',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,41',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,03',''), ('0','03','18210606013100000110','53203834000','01','4,25','','','','','','','',''), ('0','03','18210606013100000110','53203834000','01','18,86','','','','','','','',''), ('0','03','18210606013100000110','53203834000','01','5,26','','','','','','','',''), ('52,11','03','18210601030100000110','53203834000','01','','','','','','','','-0,20',''), ('52,11','03','18210601030100000110','53203834000','01','','','','','','','','-0,20',''), ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,67','')


Добавляется это в процедуре:
Код:
var
  lADOQuery: TADOQuery;
begin
    lADOQuery := TADOQuery.Create(nil);
    with lADOQuery do
    begin
      ConnectionString := Connect_Str;
      SQL.Text := add_sql;
      ExecSQL;
      Close;
end;
end;


До этого я добавлял построчно использую ту же процедуру в цикле:

Код:
INSERT INTO 999 Values ('01,1','03','18210606013100000110','53203834000','01','','','1239,00','32,97','','','412,97','','')
INSERT INTO 999 Values ('15,41,2','01','18210906010020000110','53203834000','01','','','','','','','','-1,12','')

INSERT INTO 999 Values ('0','03','18210601030100000110','53203834000','01','','','','','','','','-0,67','')
Записан

Знаешь мало - поучись, знаешь много - поделись.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 07-08-2007 15:14 » 

ну тут уж я ...
в access можно добавлять по одной строке.
не понимает он более двух строк на вставку Жаль
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 07-08-2007 15:43 » 

ну а почему он в цикле по одной строчке не хочет добавлять, неужто правда какой-то буфер переполняется?  Не понял как быть?  С ума сойти...
Записан

Знаешь мало - поучись, знаешь много - поделись.
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 07-08-2007 16:23 » 

Код:
ADOConnection1.BeginTrans;
  SQL.Text := add_sql;
  ExecSQL;
ADOConnection1.CommitTrans;
Записан

С уважением, Oldy.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #20 : 07-08-2007 17:04 » 

Oldy, можно подробнее. Это для первого случая - когда добавляется множестко строк одним запросом или второго - где добавляется построчно в цикле?
А что если я не использую ADOConnection?
Записан

Знаешь мало - поучись, знаешь много - поделись.
Oldy
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 07-08-2007 17:12 » 

Можно и для первого и для второго.

1)
Старт транзакции;
в цикле вставляем 50-60 строк;
Подтверждаем транзакцию

2)
Начало цикла;
Старт транзакции;
вставляем строку;
Подтверждаем транзакцию
Конец цикла.

В любом случае вставка идет через буфер транзакции который нужно освобождать.

в случае когда не используется ADOConnection, скорее всго придется переустанавливать соединение с базой данных через каждые 60 строк.
« Последнее редактирование: 07-08-2007 17:41 от Oldy » Записан

С уважением, Oldy.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #22 : 07-08-2007 19:24 » 

Теперь вылетает с ошибкой "не найдена выходная таблица", хотя она естественно предварительно создается.
« Последнее редактирование: 07-08-2007 19:49 от ymhuk » Записан

Знаешь мало - поучись, знаешь много - поделись.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 07-08-2007 19:50 » 

похоже я нашел в чем дело, скорее всего нужна просто небольшая временная задержка для создания таблицы в БД, буду тестить

так оно и есть ошибка была из-за того что не успевала создаться таблица до выполнения запроса. нужна пауза. пока сделал ее с помощью сообщения.
есть ли в Делфи что типа паскалевского Delay? Нужно чтобы проц не грузился при этом
« Последнее редактирование: 07-08-2007 22:16 от ymhuk » Записан

Знаешь мало - поучись, знаешь много - поделись.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 08-08-2007 06:15 » 

смотри в сторону таймеров
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
ymhuk
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #25 : 08-08-2007 11:11 » 

Sla, спасибо Ага, я сразу после написания поста, поставил таймер и готово
Записан

Знаешь мало - поучись, знаешь много - поделись.
DemonicAlligator
Гость
« Ответ #26 : 13-08-2007 06:46 » 

sleep(время_задержки_в_мс) - при этом ты отдаёшь своё время системе
Записан
zubr
Модератор

by
Offline Offline
Пол: Мужской

« Ответ #27 : 13-08-2007 07:26 » 

Или в цикле Application.ProcessMessages n-е количество раз. Тогда основной поток приложения (если это делается в основном потоке) на время задержки способен будет принимать сообщения (к примеру - закрыть приложение WM_CLOSE).
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines