Форум: "Базы";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];
Внизкак записать кавычку в строчное поле таблици через SQL запрос Найти похожие ветки
← →
redlord (2005-08-03 17:33) [0]есть примерно такой код
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-03 17:40) [1]параметры используй
← →
ANB © (2005-08-03 17:40) [2]Кривой код. А встретиться может не только кавычка.
← →
redlord (2005-08-03 19:20) [3]этот код работает в потоке и он не один
и частое обращение к датасету тока тормозит систему
поетому я собираю запрос по частям а потом отправляю его .
можноли параметры погрузить сразу на несколько запросов вперед
а потом выполнить идним махом
← →
AlexWlad © (2005-08-03 19:34) [4]Используй обратный слэш.
"bla-bla-bla\"bla-bla-bla"
← →
Владимир (2005-08-04 03:50) [5]Если строка имеет вид
a"b
то заменить " на kv
где const kv=""""; (это чтобы не мучаться)
проще всего использовать hyperstring.
← →
Silver... © (2005-08-04 04:39) [6]Попробуй
AnsiQuotedStr()
AnsiDequotedStr()
← →
ANB © (2005-08-04 10:34) [7]
> redlord (03.08.05 19:20) [3]
- мона. Только параметры для каждой строки должны иметь разные имена.
← →
Desdechado © (2005-08-04 10:43) [8]> можно ли параметры погрузить сразу на несколько запросов вперед
> а потом выполнить одним махом
а что, присвоение параметра - это такая длительная процедура?
присвоил - выполнил
и в цикле можешь загонять, например, из массива
← →
Ольга (2005-08-04 10:45) [9]
> А встретиться может не только кавычка.
Например ")", не говоря уже о всяких зарезервированных SQL выражений.
Поэтому только параметры. Это еще один цикл с 0 до 100*4.
Не знаю, как это отразится на скорости выполнения.
← →
ЮЮ © (2005-08-04 10:50) [10]>(создание такого запроса увеличивает быстродействие примерно в 2 раза посравнению с сотней одиночных запросов )
А использование одного, но параметрического запроса, да ещё внутри одной транзакции увеличит скорость на порядок и больще
← →
redlord (2005-08-04 18:42) [11]перехожу на применение параметров и тутже натыкаюсь на проблему
(ниже приведенный код взят из инета)
var
Fparams:Tparams;
begin
Fparams:=tparams.create;
fparams.items[0].asinteger:=12345;
при выполнении получаем мессагу (записи 0 не существует и вообще отвали от меня ) :)))
что я не так делаю ???
p.s. вообщето ето не я делаю а ктото в инете писал. причом на всех сайтах одно итоже и с припиской копировать запрещено
← →
Fay © (2005-08-04 19:39) [12]2 ЮЮ © (04.08.05 10:50) [10]
>> увеличит скорость на порядок и больще
А от каждой котлеты из гиппопотама поправлюсь я сразу на 3 килограмма!
Только что проверил на 10000 insert-ах. 3282 мс (с параметрами) против 3563 (без параметров).
Это как бы не совсем "на порядок и больще".
Хотя я согласен - случай как раз для параметров.
← →
Anatoly Podgoretsky © (2005-08-04 19:39) [13]redlord (04.08.05 18:42) [11]
Так и пишешь? Тогда точно записи с индексом 0 не существует.
← →
AlexWlad © (2005-08-04 19:56) [14]redlord (04.08.05 18:42) [11]
А откуда возьмутся итемсы???
Какой-то левый код...
← →
redlord (2005-08-04 20:07) [15]to fay
если не сложно пошли мне свой код которым ты время засекал и на каком компе ето делал (cpu ? ram ? )
← →
Fay © (2005-08-04 20:15) [16]2 redlord (04.08.05 20:07) [15]
Лови
← →
Fay © (2005-08-04 20:21) [17]2 redlord (04.08.05 20:07) [15]
Блин, забыл SQL Profiler выключить!
А я-то думаю, чё так долго!
Короче, 1469ms vs 1844ms.
← →
redlord (2005-08-05 00:14) [18]to FAY
посмотрел я твой код и зделал по подобие твоего свой под свои нужды
код с применением параметров работая в одном потоке прописывает 25000 записей за 36145 мс
мой первый пример (sql:=sql+....)работая в одном потоке прописывает 25000 записей за 16875 мс. а 10 таких потоков (каждый пишет 25000 записей) отрабатывает за 21348 мс
а такие большие цифры потому что прога и сервак на одном компе ноутбук celeron 1500.
p.s.
использованы компоненты dbexpres.
← →
Ольга (2005-08-05 08:50) [19]
> [18]
Тише едешь - дело мастера боится.
← →
ANB © (2005-08-05 09:46) [20]
> redlord (04.08.05 18:42) [11]
- тебе ж написали, копировать запрещено. Правильно написали.
← →
redlord (2005-08-05 12:21) [21]народ подскажите (примером)
как пользоватся параметрами не по имени а по индексу (fparams.items[0].asinteger:=12345)
а то чтото совсем ни чего не получается
← →
ANB © (2005-08-05 14:55) [22]
> redlord (05.08.05 12:21) [21]
DataSet.Params[0].AsInteger := 12345;
DataSet - это твоя кверя или другой компонент, для доступа к данным. В теорию вдаваться не буду - книжки читай.
Тебе ж написали : НЕ КОПИРОВАТЬ !!!
← →
AdLeR (2005-08-05 15:00) [23]вот один из ванриантов как поставить кавычку, нажно использоавать КОД кавычки :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))
← →
sniknik © (2005-08-05 15:12) [24]AdLeR (05.08.05 15:00) [23]
ну да...
Param := "Стас";
меняем на
Param := "Д""артоньян"; (ну имя у него такое... ;)
и получаем глюк, используй хоть "" хоть КОД кавычки...
а при неопределенном значении в переменной (что чаще всего и бывает) глюк будет с неотределенной переодичностью "выскакивать".
в этом смысл вопроса (видно он был не понят), на что твой ответ не отвечает, а вот уже первый пост (Desdechado © (03.08.05 17:40) [1]) отвечает.
← →
redlord (2005-08-07 02:54) [25]to anb
чтото я не очень понял о каком копировании одет реч ?
если об етом dataset.params:=Fparams;
то его там нет так как запрос выполняет sqlconnections
← →
ANB © (2005-08-08 09:49) [26]
> redlord (07.08.05 02:54) [25]
> to anb
> чтото я не очень понял о каком копировании одет реч ?
НЕ КОПИРОВАТЬ ПРИМЕР ИЗ ТОЙ СТАТЬИ !
← →
redlord (2005-08-10 20:58) [27]а откуда можно скопировать да такой чтоб его можно было и внукам в пример ставить
← →
Desdechado © (2005-08-10 21:25) [28]разжую, что ли
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. *****! такой простой вопрос так долго обсуждать и догонять ответ!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.041 c