Пакет запросов для SQLEXEC() | |
---|---|
FoxKot Автор Сообщений: 14 Дата регистрации: 25.03.2016 |
Столкнулся с проблемой : для ускорения обмена информацией из FoxPro в mySQL в команду SQLEXEC(nStatementHandle, cSQLCommand ...) в качестве cSQLCommand написал пакет из DELETE... и INSERT... , разделенные точкой с запятой ( по правилам пунктуации mySQL ). Не сработало
Вопрос - это в принципе нельзя делать или я чего-то не знаю? |
Re: Пакет запросов для SQLEXEC() | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Приводи содержимое переменной cSQLCommand, делов то
|
Re: Пакет запросов для SQLEXEC() | |
---|---|
Будрин Сообщений: 180 Откуда: Москва Дата регистрации: 21.09.2001 |
Если MySql бесплатный, то у вас ничего не получится. А для полной информации почитайте help по MySql. Или спросите на работе рядом сидящих сотрудников.
|
Re: Пакет запросов для SQLEXEC() | |
---|---|
FoxKot Автор Сообщений: 14 Дата регистрации: 25.03.2016 |
Вот как-то так :
lcDelete = 'DELETE FROM product_image WHERE (product_id=123);' lcInsert = 'INSERT INTO product_image (product_id,name) VALUES (123,"p1.jpg"),(123,"p2.jpg);' lcSelect = lcDelete + lcInsert lnResult = SQLEXEC ( pnLink, lcSelect ) |
Re: Пакет запросов для SQLEXEC() | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Прежде всего нужно включить поддержку батчей. Это опция MULTI_STATEMENTS - включается через Option=67108864
dev.mysql.com ------------------ WBR, Igor |
Re: Пакет запросов для SQLEXEC() | |
---|---|
WbrErr Сообщений: 1960 Дата регистрации: 05.12.2006 |
В данном случае я бы вообще использовал вызов хранимой процедуры с параметром.
|
Re: Пакет запросов для SQLEXEC() | |
---|---|
Перминов Игорь Сообщений: 1591 Откуда: Красная Орловка Дата регистрации: 16.09.2001 |
А разве двойные кавычки не ошибка в синтаксисе SQL? Может надо так исправить:
------------------ Без коментариев.. Исправлено 1 раз(а). Последнее : Перминов Игорь, 31.10.17 10:17 |
Re: Пакет запросов для SQLEXEC() | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
1. Да "двойная кавычка не допускается" 2. Что бы в символьной строке передать символьный литерал используют "экранирующую" одинарную кавычку, очень смахивающую на войную:
3. Более "кошерно" передавать параметры через "?", поскольку неизвестео какие ещё спец символы могут встретиться в символьном литерале, которые надо будет экранировать (правда у такого подхода есть и свой минус - это нельзы в логе ошибок увидеть истинные значения переданные на сервер) ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) Исправлено 2 раз(а). Последнее : PaulWist, 31.10.17 10:47 |
Re: Пакет запросов для SQLEXEC() | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Это зависит от того где именно используется (для строковых литералов или для квотирования имён объектов (полей, таблиц)) - для какой СУБД и каких средств доступа, а ещё и от настроек... dev.mysql.com Не в фоксе. Для фокса сия команда будет синтаксически неверной. Вот в САМОЙ СУБД вполне может быть и такое реализовано - но тут то речь про фоксовую команду создающую фоксовую строковую переменную... Смотря кем и как создаётся этот самый лог. Если со стороны фокса, то нет проблем и значения переменных в лог ошибок записать. Хоть всех, хоть "по шаблону", если в SPT-запросах принять определённое "соглашение по именованию". Со стороны сервера (или клиентских библиотек доступа) тоже должна быть такая возможность (для оракла в принципе всё видно - хотя, конечно, от версии "средства мониторинга" и от настроек зависит). Другое дело, что параметризация крайне плохо сочетается с конкретно таким типом запросов - "многозаписным INSERT VALUES", равно как и вообще с (генерируемыми) батчами (даже всего на 10 DML команд - это ж сколько параметров то потребуется ). Параметризация хороша для статических но очень часто используемых команд - например для посылки ОДНОЙ записи из GUI на сервер в команде INSERT, или для "типичного SELECT запроса" - скажем выборка всех товаров по начальным символам названия и коду поставщика. Кстати, автору на заметку - зачастую просто переход к ручному управлению транзакциями и некоторые настройки клиента (ODBC) способны увеличить скорость "заливки" данных тривиальным циклом с множеством отдельных команд до того же, что даст и работа с милионно-строчными батчами. А вообще для "массовой погрузки" во всех серверах существуют специальные команды/режимы/утилиты. В частности для MySQL это LOAD DATA INFILE и использующая эту возможность утилита mysqlimport. Как правило скорость погрузки данных через подобные средства на порядок выше чем любые "тонко оптимизированные" обычные команды. К сожалению не во всех сценариях эти средства применимы... Обычно без проблем работает сценарий "залить все данные в пустую таблицу". Для объединения/хитрого слияния данных это скорее всего не подойдёт... ------------------ WBR, Igor |
Re: Пакет запросов для SQLEXEC() | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
Да, прозевал, что вопрос про MySql. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: Пакет запросов для SQLEXEC() | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
мдя |
Re: Пакет запросов для SQLEXEC() | |
---|---|
FoxKot Автор Сообщений: 14 Дата регистрации: 25.03.2016 |
Двойные кавычки не ошибка. Я с ними работал. Опечатка, замеченная в моем примере - только в примере. А вот Igor Korolyov написал :
Вот эта версия вроде бы срабатывает. Я смогу только в понедельник проверить и обязательно отпишусь. Всем огромное спасибо! |
© 2000-2024 Fox Club  |