Страница 1 из 1

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

Добавлено: 05 Май 2021, 19:09
gopstop2007
ODBC Mysql , при создание таблицы, через фиктивную таблицу не реагирует и не показывает ошибку.

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

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

Кто знает решение или видит ошибку в данном коде, откликнитесь.
Спасибо за внимание

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

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

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

Добавлено: 05 Май 2021, 21:11
kreator
Не буду категоричен, но вроде ErrorCode() не сообщает о скульных проблемах. Надо использовать FILEERRORCODE() и FILEERROR(). Во всяком случае, мы делаем так.

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

Добавлено: 05 Май 2021, 21:45
ingasoftplus
да что гадать - может он таблицу не Open() даже. Может это не Dummy таблица, а физическая. Может /TURBOSQL не прописан....
ErrorCode() сообщает код, а FILEERRORCODE() и FILEERROR() конкретизирует

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

Добавлено: 06 Май 2021, 7:57
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 нужно?
Если закидывать, все, что выше указано через скрипт на сервере, создается без проблем.

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

Добавлено: 06 Май 2021, 10:47
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.