![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как записать кавычку в строчное поле таблици через SQL запрос [D7, MSSQL]
redlord © (2005-08-03 17:33:00)есть примерно такой код
var fd1,fd2,fd3,fd4,sql:string;
begin
for n:=0 to 100 do
sql:=sql+ 'insert into proba7 (f1,f2,f3,f4) values ('''+fd1+''','''+fd2+''','''+fd3+''','''+fd4+''')';
sqlDataSet.CommandText:=sql;
sqlDataSet.ExecSQL(true);
end;
(создание такого запроса увеличивает быстродействие примерно в 2 раза посравнению с сотней одиночных запросов )
и все прекрасно работает пока в какойлибо переменной fd не встретится кавычка [']
как можно передать в запросе кавычку чтоб сервер не пощитал ее знаком синтаксиса команды, а принял как данные??
Desdechado (2005-08-10 21:25:00) [1]разжую, что ли
Query1.Sql.Text :=
'INSERT INTO testblob ' +
' ( ' +
' fBlob' +
' )' +
' VALUES' +
' (' +
' :ParamBlobField' +
')';
Query1.ParamByName('ParamBlobField').DataType := ftBlob;
Query1.ParamByName('ParamBlobField').ParamType := ptInput;
Query1.ParamByName('ParamBlobField').LoadFromFile('MyFile',ftBlob);
Query1.ExecSql;
Параметры создаются АВТОМАТОМ, если ты присвоишь текст запроса, в котором будет двоеточие перед текстовым идентификатором (в примере :ParamBlobField). Их потом и присваивай. Не надо вручную что-то лепить в список параметров.
P.S. создание параметров автоматом можно и отключить, но для тебя это сейчас неактуально
P.P.S. *****! такой простой вопрос так долго обсуждать и догонять ответ!
redlord (2005-08-10 20:58:00) [2]а откуда можно скопировать да такой чтоб его можно было и внукам в пример ставить
ANB (2005-08-08 09:49:00) [3]
> redlord (07.08.05 02:54) [25]
> to anb
> чтото я не очень понял о каком копировании одет реч ?
НЕ КОПИРОВАТЬ ПРИМЕР ИЗ ТОЙ СТАТЬИ !
redlord (2005-08-07 02:54:00) [4]to anb
чтото я не очень понял о каком копировании одет реч ?
если об етом dataset.params:=Fparams;
то его там нет так как запрос выполняет sqlconnections
sniknik (2005-08-05 15:12:00) [5]AdLeR (05.08.05 15:00) [23]
ну да...
Param := 'Стас';
меняем на
Param := 'Д''артоньян'; (ну имя у него такое... ;)
и получаем глюк, используй хоть '' хоть КОД кавычки...
а при неопределенном значении в переменной (что чаще всего и бывает) глюк будет с неотределенной переодичностью "выскакивать".
в этом смысл вопроса (видно он был не понят), на что твой ответ не отвечает, а вот уже первый пост (Desdechado © (03.08.05 17:40) [1]) отвечает.
AdLeR (2005-08-05 15:00:00) [6]вот один из ванриантов как поставить кавычку, нажно использоавать КОД кавычки :o)
пример:
var
Param : String;
begin
...
Param := 'Стас';
ADOQuery.SQL.Add('Select Name');
ADOQuery.SQL.Add('From table');
ADOQuery.SQL.Add('Where Name = ' + chr(39) +Param + chr(39) );
...
если несколько параметров, то
( chr(39)+Param+chr(39)+','+chr(39)+Param2+chr(39))
ANB (2005-08-05 14:55:00) [7]
> redlord (05.08.05 12:21) [21]
DataSet.Params[0].AsInteger := 12345;
DataSet - это твоя кверя или другой компонент, для доступа к данным. В теорию вдаваться не буду - книжки читай.
Тебе ж написали : НЕ КОПИРОВАТЬ !!!
redlord (2005-08-05 12:21:00) [8]народ подскажите (примером)
как пользоватся параметрами не по имени а по индексу (fparams.items[0].asinteger:=12345)
а то чтото совсем ни чего не получается
ANB (2005-08-05 09:46:00) [9]
> redlord (04.08.05 18:42) [11]
- тебе ж написали, копировать запрещено. Правильно написали.
Ольга (2005-08-05 08:50:00) [10]
> [18]
Тише едешь - дело мастера боится.
redlord (2005-08-05 00:14:00) [11]to FAY
посмотрел я твой код и зделал по подобие твоего свой под свои нужды
код с применением параметров работая в одном потоке прописывает 25000 записей за 36145 мс
мой первый пример (sql:=sql+....)работая в одном потоке прописывает 25000 записей за 16875 мс. а 10 таких потоков (каждый пишет 25000 записей) отрабатывает за 21348 мс
а такие большие цифры потому что прога и сервак на одном компе ноутбук celeron 1500.
p.s.
использованы компоненты dbexpres.
Fay (2005-08-04 20:21:00) [12]2 redlord (04.08.05 20:07) [15]
Блин, забыл SQL Profiler выключить!
А я-то думаю, чё так долго!
Короче, 1469ms vs 1844ms.
Fay (2005-08-04 20:15:00) [13]2 redlord (04.08.05 20:07) [15]
Лови
redlord (2005-08-04 20:07:00) [14]to fay
если не сложно пошли мне свой код которым ты время засекал и на каком компе ето делал (cpu ? ram ? )
AlexWlad (2005-08-04 19:56:00) [15]redlord (04.08.05 18:42) [11]
А откуда возьмутся итемсы???
Какой-то левый код...
Anatoly Podgoretsky (2005-08-04 19:39:00) [16]redlord (04.08.05 18:42) [11]
Так и пишешь? Тогда точно записи с индексом 0 не существует.
Fay (2005-08-04 19:39:00) [17]2 ЮЮ © (04.08.05 10:50) [10]
>> увеличит скорость на порядок и больще
А от каждой котлеты из гиппопотама поправлюсь я сразу на 3 килограмма!
Только что проверил на 10000 insert-ах. 3282 мс (с параметрами) против 3563 (без параметров).
Это как бы не совсем "на порядок и больще".
Хотя я согласен - случай как раз для параметров.
redlord (2005-08-04 18:42:00) [18]перехожу на применение параметров и тутже натыкаюсь на проблему
(ниже приведенный код взят из инета)
var
Fparams:Tparams;
begin
Fparams:=tparams.create;
fparams.items[0].asinteger:=12345;
при выполнении получаем мессагу (записи 0 не существует и вообще отвали от меня ) :)))
что я не так делаю ???
p.s. вообщето ето не я делаю а ктото в инете писал. причом на всех сайтах одно итоже и с припиской копировать запрещено
ЮЮ (2005-08-04 10:50:00) [19]>(создание такого запроса увеличивает быстродействие примерно в 2 раза посравнению с сотней одиночных запросов )
А использование одного, но параметрического запроса, да ещё внутри одной транзакции увеличит скорость на порядок и больще
Ольга (2005-08-04 10:45:00) [20]
> А встретиться может не только кавычка.
Например ')', не говоря уже о всяких зарезервированных SQL выражений.
Поэтому только параметры. Это еще один цикл с 0 до 100*4.
Не знаю, как это отразится на скорости выполнения.