Niestety ale przy imporcie musi być unikalna wartość liczbowa w ID_MSCSKLADOWANIA (wartość ta ma być tylko unikalna dla tabeli MSCSKLADOWANIA w której jest ID_MSCSKLADOWANIA)
Jeśli nie podmapuje żadnej kolumny z mojego pliku importu do ID_MSCSKLADOWANIA to mam następujący błąd.
Jak podmapuje kolumnę bez wartości również błąd.
Nie wiem jak to obejść.
a ID_MSCSKLADOWANIA ma patrzyć na tą kolumnę, szukać największej wartości i wpisać wartość aktualna + 1 do nowego wpisu, robić tak, aż skończy się plik do importu .txt
Z opisu wynika że kolumna ID_MSCSKLADOWANIA
jest kolumną typu autoincrement
. Możesz zastosować rozwiązanie podane przez @abrakadaber , albo dodatkowo zdefiniować trigger który przy pomocy generatora, na bieżąco, będzie wstawiał unikalne wartości .
CREATE GENERATOR gen_MSCSKLADOWANIA;
SET GENERATOR gen_MSCSKLADOWANIA TO 0;
CREATE TRIGGER BEFORE_TABELA_INSERT FOR TABELA
ACTIVE BEFORE INSERT
AS
BEGIN
NEW.ID_MSCSKLADOWANIA = GEN_ID( gen_MSCSKLADOWANIA, 1);
END;
Pomocne, lecz jak dostosować to do mojego zapytania poniżej? @grzegorz_so
A tak wygląda moje zapytanie które potrzebuję zmodyfikować aby nadawany był automatycznie ID_MSCSKLADOWANIA
execute ibeblock
as
begin
cbb = 'execute ibeblock (RecCount variant)
as
begin
if (ibec_Mod(RecCount, 100) = 0) then
ibec_Progress(RecCount || '' records imported.'');
end;';
DB = ibec_CreateConnection(__ctFirebird, 'DBName="XXX";
ClientLib=XXX\gds32.dll;
User=XXX; Password=XXX; Names=NONE; SqlDialect=3;');
try
ibec_UseConnection(DB);
Res = ibec_ImportData(DB, '', __impText, 'XXX.txt', '',
'RowFirst=1; RowLast=2147483647;
DateOrder=YMD; DateSeparator=";"; TimeSeparator=";";
CSVDelimiter=TAB; RecordSeparator=CRLF; StringQualifier=DoubleQuote;', '', cbb);
if (Res is not null) then
ibec_ShowMessage(Res || ' records were imported successfully.');
finally
ibec_CloseConnection(DB);
end;
end