Ошибка фиктивной таблицы

CWICWEB, ClarioNET и пр.

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Ошибка фиктивной таблицы

Сообщение gopstop2007 »

ODBC Mysql , при создание таблицы, через фиктивную таблицу не реагирует и не показывает ошибку.

Код: Выделить всё

Dummy{PROP:SQL} = 'Create table...'
IF ErrorCode()
   Message('Ошибка ....') 
END
Clarion 10 ABC

Кто знает решение или видит ошибку в данном коде, откликнитесь.
Спасибо за внимание
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 425
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 87 раз
Поблагодарили: 5 раз

Ошибка фиктивной таблицы

Сообщение ingasoftplus »

весь код + как описана таблица в кларионе
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Ошибка фиктивной таблицы

Сообщение kreator »

Не буду категоричен, но вроде ErrorCode() не сообщает о скульных проблемах. Надо использовать FILEERRORCODE() и FILEERROR(). Во всяком случае, мы делаем так.
We are hard at work… for you. :)
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 425
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 87 раз
Поблагодарили: 5 раз

Ошибка фиктивной таблицы

Сообщение ingasoftplus »

да что гадать - может он таблицу не Open() даже. Может это не Dummy таблица, а физическая. Может /TURBOSQL не прописан....
ErrorCode() сообщает код, а FILEERRORCODE() и FILEERROR() конкретизирует
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Ошибка фиктивной таблицы

Сообщение gopstop2007 »

ingasoftplus писал(а): 05 Май 2021, 20:43 весь код + как описана таблица в кларионе
Фиктивная таблица в DCT

Код: Выделить всё

Fstr                 FILE,DRIVER('ODBC'),OWNER(fil:owner),NAME(fil:fstr),PRE(Fstr),CREATE,BINDABLE,THREAD ! Фиктивная таблица   
Record                   RECORD,PRE()
StrValue                    CSTRING(8000)                  ! Строка SQL данных       
                         END
                     END                       
Так как в Clarion при авто создании таблицы в Mysql не которые параметры создаются криво (авто-инкремент, primary key, Triggers, view и прочее)
Создаваемая таблица, таблиц много, эта для примера

Код: Выделить всё

  ! проверка на наличие таблицы на сервере, если ее нет - создаем   
    LoadQueueFromSQL('SELECT COUNT(*) FROM information_schema.columns where TABLE_SCHEMA = "'& |
                Fil:dbase & '" and TABLE_NAME = "barcodes"',,field#)   

    IF NOT field#
        Fstr{PROP:SQL} = 'CREATE TABLE `barcodes` ('&|
              '`PROD_ID` int(11) NOT NULL,'&|
              '`CUST_ID` int(11) NOT NULL,'&|
              '`BARCODE` varchar(127) NOT NULL,'&|
              '`PRINTED` tinyint(4) DEFAULT NULL,'&|
              '`PRINTCOUNT` int(11) DEFAULT NULL,'&|
              '`FDELETE` tinyint(4) DEFAULT NULL,'&|
              'PRIMARY KEY (`PROD_ID`,`CUST_ID`),'&|
              'UNIQUE KEY `BAR_BARCODEKEY` (`BARCODE`)'&|
            ') ENGINE=InnoDB DEFAULT CHARSET=cp1251;'
        IF ERRORCODE() THEN Message('Ошибка создания - barcodes!'); l_error = 1; EXIT; END       

        Fstr{PROP:SQL} = 'CREATE TRIGGER `barcodes_add` AFTER INSERT ON `barcodes` FOR EACH ROW BEGIN  INSERT INTO barcodes_log (LOG_ID,LOG_USER,LOG_STATUS,PROD_ID,CUST_ID,BARCODE,FDELETE) VALUES (NULL,0,1,NEW.PROD_ID,NEW.CUST_ID,NEW.BARCODE,NEW.FDELETE); END;'
        Fstr{PROP:SQL} = 'CREATE TRIGGER `barcodes_upd` AFTER UPDATE ON `barcodes` FOR EACH ROW BEGIN  INSERT INTO barcodes_log (LOG_ID,LOG_USER,LOG_STATUS,PROD_ID,CUST_ID,BARCODE,FDELETE) VALUES (NULL,0,2,NEW.PROD_ID,NEW.CUST_ID,NEW.BARCODE,NEW.FDELETE);END;'
        Fstr{PROP:SQL} = 'CREATE TRIGGER `barcodes_del` AFTER DELETE ON `barcodes` FOR EACH ROW BEGIN  INSERT INTO barcodes_log (LOG_ID,LOG_USER,LOG_STATUS,PROD_ID,CUST_ID,BARCODE,FDELETE) VALUES (NULL,0,3,OLD.PROD_ID,OLD.CUST_ID,OLD.BARCODE,OLD.FDELETE);END;'
    END
kreator писал(а): 05 Май 2021, 21:11 Не буду категоричен, но вроде ErrorCode() не сообщает о скульных проблемах. Надо использовать FILEERRORCODE() и FILEERROR(). Во всяком случае, мы делаем так.
Вроде всегда работает, вот для вывода ошибок, да нужно это - FILEERRORCODE() и FILEERROR()
ingasoftplus писал(а): 05 Май 2021, 21:45 да что гадать - может он таблицу не Open() даже. Может это не Dummy таблица, а физическая. Может /TURBOSQL не прописан....
ErrorCode() сообщает код, а FILEERRORCODE() и FILEERROR() конкретизирует
Open() - есть, /TURBOSQL - для Mysql нужно?
Если закидывать, все, что выше указано через скрипт на сервере, создается без проблем.
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
ingasoftplus
Ветеран
Сообщения: 425
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)
Благодарил (а): 87 раз
Поблагодарили: 5 раз

Ошибка фиктивной таблицы

Сообщение ingasoftplus »

try without `

Код: Выделить всё

Fstr{PROP:SQL} = 'CREATE TABLE barcodes ('&|
              'PROD_ID int(11) NOT NULL,'&|
              'CUST_ID int(11) NOT NULL,'&|
              'BARCODE varchar(127) NOT NULL,'&|
              'PRINTED tinyint(4) DEFAULT NULL,'&| etc.
Ответить