Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как записать кавычку в строчное поле таблици через SQL запрос [D7, MSSQL]


Страницы:   1 2

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.
Не знаю, как это отразится на скорости выполнения.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо