![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ввод данных в таблицу (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;
и
если коннекта нет, всё равно инсертим
А так - всё дело в том самом файле, в его содержимом.