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