Код: Выделить всё
Dummy{PROP:SQL} = 'Create table...'
IF ErrorCode()
   Message('Ошибка ....') 
END
Кто знает решение или видит ошибку в данном коде, откликнитесь.
Спасибо за внимание
Модератор: Дед Пахом
Код: Выделить всё
Dummy{PROP:SQL} = 'Create table...'
IF ErrorCode()
   Message('Ошибка ....') 
END
Фиктивная таблица в 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                       
Код: Выделить всё
  ! проверка на наличие таблицы на сервере, если ее нет - создаем   
    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
Вроде всегда работает, вот для вывода ошибок, да нужно это - FILEERRORCODE() и FILEERROR()kreator писал(а): 05 Май 2021, 21:11 Не буду категоричен, но вроде ErrorCode() не сообщает о скульных проблемах. Надо использовать FILEERRORCODE() и FILEERROR(). Во всяком случае, мы делаем так.
Open() - есть, /TURBOSQL - для Mysql нужно?ingasoftplus писал(а): 05 Май 2021, 21:45 да что гадать - может он таблицу не Open() даже. Может это не Dummy таблица, а физическая. Может /TURBOSQL не прописан....
ErrorCode() сообщает код, а FILEERRORCODE() и FILEERROR() конкретизирует
Код: Выделить всё
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.