Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
4-1122815186
Borland
2005-07-31 17:06
2005.09.25
CD_ROM


4-1122556137
Ugrael
2005-07-28 17:08
2005.09.25
как обрабатывать wm_paint


3-1123832912
AloneAli
2005-08-12 11:48
2005.09.25
Не могу в DBGridEh сделать выбор из другой таблицы в виде ComboBo


1-1125557952
Боян Георгиев
2005-09-01 10:59
2005.09.25
Как проиграть *.wav файл?


14-1125609338
KilkennyCat
2005-09-02 01:15
2005.09.25
2 сентября. С Днем рождения!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский