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

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

Ввод данных в таблицу (Insert и Commit). [D7]


vigo ©   (2005-07-18 11:48:00) 

Добрый день. Вопрос по Insert'y в таблицу. Подгружаю данные из файла, подготавдиваю и пишу в таблицу. После 10-ого Insert'a (на 11-м)пишет ошибку: "ORA-24337: идентификатор команды не подготовлен".
if not OpenDlg.Execute then Exit else
 begin
  if SQLConnection.Connected <> True then
   try
    SQLConnection.Connected := True;
    SQLConnection.Open;
    except
     on E: Exception do ShowMessage(E.Message);
   end;
  Assignfile(f, OpenDlg.FileName);
  Reset(f);
  while not eof(f) do
   begin
    readln(f, s);
    // некоторые манипуляции с данными строки
    SQLDataSet.CommandText := ('insert into invo.komunal values ('+res+')'); //res - это подготовленные данные строки
    SQLDataSet.ExecSQL;
   end;
  CloseFile(f);
 end;
end;

И ещё один вопрос как коммитить (есть подозрение что проблемма связано именно с этим)?


evvcom   (2005-07-18 15:08:00) [1]


> Не зна даже что и делать!!!!!!??????

Вопрос в своей ветке задать.


S_s   (2005-07-18 14:20:00) [2]

D6,QR3.0

Здравствуйте. Возникла проблема: с помощью SQL-запроса составляю отчет с группированием по полю. Все выходит нормально, но Group Footer сумму считает неправильно. например:
2
5
сумма:7
4
5
6
сумма:24
......
Не зна даже что и делать!!!!!!??????


s_s   (2005-07-18 14:17:00) [3]

D6,QR3.0

Здравствуйте. Возникла проблема: с помощью SQL-запроса составляю отчет с группированием по полю. Все выходит нормально, но Group Footer сумму считает неправильно. например:
2
5
сумма:7
4
5
6
сумма:24
......
Не зна даже что и делать!!!!!!??????


Val   (2005-07-18 13:54:00) [4]

>"локоничнее" - нафиг. нормально надо делать.


evvcom   (2005-07-18 13:41:00) [5]


> Зачем на несколько
> insert into invo.komunal values (:res)
> где res - строковый параметр

И что? Разве требуется всю эту белиберду засунуть в одно строковое поле?
На каждое поле свой параметр!


isasa   (2005-07-18 13:39:00) [6]

Зачем на несколько
insert into invo.komunal values (:res)
где res - строковый параметр

но все равно надо делать, хотя-бы,
....
AnsiReplaceStr(res, '''', '''''');

По поводу использования параметров, не факт, в данном случае
....SQL.Text:='insert into invo.komunal values ('+AnsiReplaceStr(res, '''', '''''')+')';
ИМХО, локоничнее


vigo   (2005-07-18 12:27:00) [7]

спасибо...


vigo   (2005-07-18 12:26:00) [8]

в смысле в виде параметров? то есть res(все данные), грубо говоря, "разбивать" на несколько параметров?


evvcom   (2005-07-18 12:23:00) [9]

+ к [8]:
запрос таким образом создается один раз, подготавливается (prepare явно или неявно) и далее данные передаются через параметры.
Плюсы:
1. Не тратится время на каждом шаге цикла на формирование, подготовку (разбор, компиляция) запроса.
2. В Shared Pool окажется только один такой запрос, и он уже (после prepare) будет в оперативной памяти сервера.
3. В случае работы с датой/временем, а также числами с плавающей запятой избегаем проблем с региональными настройками.
Минусы: что-то я их не вижу.


evvcom   (2005-07-18 12:15:00) [10]

insert into invo.komunal values (:var1, :var2, :var3)


vigo   (2005-07-18 12:13:00) [11]


> isasa ©   (18.07.05 12:08) [5]

ага, в этом и была проблемма.


vigo   (2005-07-18 12:12:00) [12]


> evvcom ©   (18.07.05 11:58) [2]

Объясни как insert'ить правильно, если не секрет?


isasa   (2005-07-18 12:08:00) [13]

А кто проверит res на наличие в ней одинарной кавычки (') ?


Val   (2005-07-18 12:01:00) [14]

ORA-24337 statement handle not prepared

Cause: A statement cannot be executed before making preparing a request.

Action: Prepare a statement before attempting to execute it.


Что содержит res в этом случае?
Перейдите на параметры, кстати.


Reindeer Moss Eater   (2005-07-18 11:59:00) [15]

readln(f, s);

ShowMessage(Res);

SQLDataSet.CommandText := ('insert into invo.komunal values ('+res+')'); //res - это подготовленные данные строки


evvcom   (2005-07-18 11:58:00) [16]


> SQLDataSet.CommandText := ('insert into invo.komunal values
> ('+res+')');

Вот таких программистов потом администраторы Oracle называют "уродами", потому что постоянно приходиться чистить из-за них Shared Pool сервера.


Johnmen   (2005-07-18 11:57:00) [17]

Забавно..
SQLConnection.Connected <> True
и
SQLConnection.Connected := True;
SQLConnection.Open;

и
если коннекта нет, всё равно инсертим

А так - всё дело в том самом файле, в его содержимом.


Наверх

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