powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не работает подключение к базе через ADO.Command
12 сообщений из 62, страница 3 из 3
Не работает подключение к базе через ADO.Command
    #39110808
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Код: sql
1.
WHERE "Coupons"."Code" = :TALON AND "Active" = 1;


Тестировать лениво, но вот у меня стойкое ощущение, что ВОТ ТАК как раз не надо.
Надо без использования индекса для уменьшения (опять же, возможных, т.к. мы не знаем, есть ли одинаковые) числа апдейтов
Код: sql
1.
WHERE "Coupons"."Code" = :TALON AND "Active"+0 = 1;
...
Рейтинг: 0 / 0
Не работает подключение к базе через ADO.Command
    #39110819
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Симонов Денис][quot JuniorSQL]
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
...
Забавно. Поглядел твой DDL. Возникло два вопроса:

1. На кой ты используешь SUBSTRING("couponsFile"."code" FROM 1 FOR 12) если у тебя couponsFile и так длинной 12 символов?
2. "Coupons"."Code" походу не фига не ПК. Какова селективность индекса на этот филд?
3. Сколько по времени выполняется 
...
[/quot]

1. Это осталось еще после того, как номера были 13 символов. Согласен он нафиг тут не нужен.
2. Селективность максимальная, т.е. все номера уникальны.
3. Время выполнения разное. например вот это:

[SRC sql]BEGIN
  FOR
      SELECT SUBSTRING("couponsFile"."code" FROM 1 FOR 12)
        FROM "couponsFile"
        INTO :TALON
    DO
      UPDATE "Coupons"
        SET "Active" = 0
        WHERE "Coupons"."Code" = :TALON;
END



выполняется примерно ~20 секунд, но никаких изменений не делает.
а вот это:

BEGIN
FOR
SELECT SUBSTRING("couponsFile"."code" FROM 1 FOR 12)
FROM "couponsFile"
INTO :TALON
DO
UPDATE "Coupons"
SET "Active" = 0
WHERE SUBSTRING("Coupons"."Code" FROM 1 FOR 12) = :TALON;
END

Уже зависает на очень и очень долго и я не дожидался окончания...
...
Рейтинг: 0 / 0
Не работает подключение к базе через ADO.Command
    #39110849
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

DDL определение домена TName в студию.

Для того чтобы вот это

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
BEGIN
FOR
  SELECT SUBSTRING("couponsFile"."code" FROM 1 FOR 12)
  FROM "couponsFile"
  INTO :TALON
  DO
    UPDATE "Coupons"
     SET "Active" = 0 
      WHERE SUBSTRING("Coupons"."Code" FROM 1 FOR 12) = :TALON;
END



работало быстро нужен вычисляемый индекс SUBSTRING("Code" FROM 1 FOR 12) в таблице Coupons, но 1.5 вычисляемых индексов не поддерживал
...
Рейтинг: 0 / 0
Не работает подключение к базе через ADO.Command
    #39110865
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисJuniorSQL,

где план вот этого запроса

Код: sql
1.
2.
3.
      UPDATE "Coupons"
        SET "Active" = 0
        WHERE "Coupons"."Code" STARTING WITH :TALON;



На фига на STARTING WITH то заменил?

ну я в ответ на 18454771 посоветовал ( 18454825 )
...
Рейтинг: 0 / 0
Не работает подключение к базе через ADO.Command
    #39110869
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, понятно, значит в любом случаи нормальной скорости выполнения на среднем ПК не добиться ?

DDL, TName:
Код: sql
1.
2.
3.
CREATE DOMAIN "TName" AS
VARCHAR(100) CHARACTER SET WIN1251
COLLATE WIN1251;
...
Рейтинг: 0 / 0
Не работает подключение к базе через ADO.Command
    #39110874
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

проверьте

Код: sql
1.
2.
3.
SELECT *
FROM Coupons
WHERE "Coupons"."Code" = '2334455535623' -- вместо этого поставить любой код из вашего файла который должен был бы обносится



возвращает хоть что-нибудь. Попробуйте ещё

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
BEGIN
  FOR
      SELECT TRIM("couponsFile"."code")
        FROM "couponsFile"
        INTO :TALON
    DO
      UPDATE "Coupons"
        SET "Active" = 0
        WHERE "Coupons"."Code" = :TALON;
END



P.S. Меня терзают смутные сомнения что подобный вопрос уже был на sql.ru
...
Рейтинг: 0 / 0
Не работает подключение к базе через ADO.Command
    #39110902
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Все верно, тема прошлого года, но тогда я устал бороться с FB 1.5. сейчас же нужно все переделать, но увы, пока ничего не получается :(

А разве TRIM был в FB 1.5 ? я проверял вчера, вроде его не было в нем.
...
Рейтинг: 0 / 0
Не работает подключение к базе через ADO.Command
    #39110905
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисJuniorSQL,

проверьте

[src sql]
SELECT *
FROM Coupons
WHERE "Coupons"."Code" = '2334455535623' -- вместо этого поставить любой код из вашего файла который должен был бы обносится


Это я сразу проверил. Все нормально.
...
Рейтинг: 0 / 0
Не работает подключение к базе через ADO.Command
    #39110922
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQL,

не было. Ну так подключи UDF.

Если прогу писали вы, то давно бы уже перешли на что посвежее.
...
Рейтинг: 0 / 0
Не работает подключение к базе через ADO.Command
    #39110929
DBConstructor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLСимонов Денис, понятно, значит в любом случаи нормальной скорости выполнения на среднем ПК не добиться ?
Как вы сделали копию базы - обычным копированием файла или backup/restore утилитой gbak?
Атрибут "ForcedWrite" для вашей базы ON или OFF?
...
Рейтинг: 0 / 0
Не работает подключение к базе через ADO.Command
    #39110932
JuniorSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисJuniorSQL,

не было. Ну так подключи UDF.

Если прогу писали вы, то давно бы уже перешли на что посвежее.

ПО писал к сожалению не я. Так бы конечно. Не знаю как подключить UDF. =(
Ну мне собственно нужно просто передать эту строку, которая прекрасно работает на ФБ 2.5 под ФБ 1.5

Код: sql
1.
2.
MERGE INTO "Coupons" USING "couponsFile" ON SUBSTRING("couponsFile"."code" FROM 1 FOR 12) = "Coupons"."Code"
WHEN MATCHED THEN UPDATE SET "Active" = 0;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
BEGIN
  FOR
      SELECT SUBSTRING("couponsFile"."code" FROM 1 FOR 12)
        FROM "couponsFile"
        INTO :TALON
    DO
      UPDATE "Coupons"
        SET "Active" = 0
        WHERE "Coupons"."Code" = :TALON;
END

Это вроде то что нужно, но почему то не устанавливает полю "Active = 0". Хотя номера в таблицах я проверил одинаковые есть.
...
Рейтинг: 0 / 0
Не работает подключение к базе через ADO.Command
    #39110936
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JuniorSQLЭто вроде то что нужно, но почему то не устанавливает полю "Active = 0". Хотя номера в таблицах я проверил одинаковые есть.Если номер равен, то такого не может быть. Ищи отличия.
И, кстати, неплохо бы сделать INDEX OFF/ON для перестройки индекса по "Coupons"."Code"
Так, на всякий случай.
...
Рейтинг: 0 / 0
12 сообщений из 62, страница 3 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не работает подключение к базе через ADO.Command
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]