Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.25;
Скачать: CL | DM;

Вниз

как записать кавычку в строчное поле таблици через 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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.041 c
14-1125646706
ocean
2005-09-02 11:38
2005.09.25
Второй DHCP?


14-1125574544
TUser
2005-09-01 15:35
2005.09.25
Примиримся ...


1-1125376948
Darkwing
2005-08-30 08:42
2005.09.25
Как убрать звук при нажатии Enter а в TEdit e.


2-1124164683
КотаПёс
2005-08-16 07:58
2005.09.25
Запись текста в файл


14-1124344469
Kerk
2005-08-18 09:54
2005.09.25
Новый ресурс о делфи. Рекомендую всем.