Przypisanie do zmiennej String wartości NULL

0

Witam.
Czy da się w jakiś sposób przypisać do zmiennej typu String, wartości typu variant - NULL? Potrzebuję ze względu na to, iż w bazie danych mam pola typu integer, które są kluczami obcymi, ale mogą przyjmować wartość NULL. Pustego ciągu nie chcą łyknąć.

0

to się po prostu nie podaje tego pola w insert

0

No faktycznie. Dzięki. Zaćmienie umysłowe. Heh. No dobrze. Ale załóżmy, że jednak muszę. Po prostu sytuacje mam taką, że importuję masę rekordów, z tym że część to pole ma wpisane, a część nie. I co wtedy?? A import robię automatem (napisałem sobie programik) z pliku CSV. Nazwy pół również pobieram automatem z pliku CSV.

0

No to zmień ten programik ;). Jeśli pole jest wypełnione, to daj w zapytaniu wartość, w przeciwnym razie - nie.

0

a nie możesz dać samego NULL w zapytaniu insert ?

0

To ja może pokażę kod procedury:

procedure TForm1.Button1Click(Sender: TObject);
var f : TextFile;
    s : String;
    temp : TTableString;
    plik : TTableString;
    sql : String;
    sql2 : String;
    sql3 : String;
    tabela : String;
    i : Integer;
begin
if OpenDialog1.Execute then
begin
  plik := explode(OpenDialog1.FileName, '.');
  sql3 := 'delete from ' + ExtractFileName(plik[0]) + ';' + #13;
  AssignFile(f, OpenDialog1.FileName);
  Reset(f);
  readln(f, s);
  temp := explode(s, ';');
  sql := sql + 'insert into ' + ExtractFileName(plik[0]) + ' (';
  for i := Low(temp) to High(temp) do
  begin
    if i <> High(temp) then sql := sql + temp[i] + ', '
    else sql := sql + temp[i] + ') values (';
  end;
  while not eof(f) do
  begin
    readln(f, s);
    SetLength(temp, 0);
    temp := explode(s, ';');
    sql2 := sql;
    for i := Low(temp) to High(temp) do
    begin
      if i <> High(temp) then
        begin
          if i = 3 then
            if temp[i] = '' then temp[i] := '31';
<font color="red">          if i = 7 then
            if temp[i] = '' then temp[i] := NULL;
          if i = 9 then
            if temp[i] = '' then temp[i] := NULL;
          if i = 12 then
            if temp[i] = '' then temp[i] := NULL;</font>
          sql2 := sql2 + '"' + temp[i] + '", ';
        end
      else sql2 := sql2 + '"' + temp[i] + '");' + #13;
    end;
    sql3 := sql3 + sql2;
  end;
  CloseFile(f);
  AssignFile(f, ExtractFileName(plik[0]) + '.sql');
  Rewrite(f);
  write(f, sql3);
  CloseFile(f);
end;
Label1.Caption := 'Tworzenie skryptu SQL z danymi ukończone';

end;

Kolorem czerwonym zaznaczyłem newralgiczny punkt. Program, może nie jest wysokich lotów, ale działa poprawnie w przypadku, gdy w pliku CSV wszystkie dane są.

0
if i <> High(temp) then
        begin
          if i = 3 then
            if temp[i] = '' then temp[i] := '"31"'
          else if i = 7 then
            if temp[i] = '' then temp[i] := 'NULL'
          else if i = 9 then
            if temp[i] = '' then temp[i] := 'NULL'
          else if i = 12 then
            if temp[i] = '' then temp[i] := 'NULL'
          else 
            temp[i] := '"' + temp[i] + '"';
          sql2 := sql2 + temp[i] + ', ';
        end
      else sql2 := sql2 + temp[i] + ');' + #13;

i powinno być ok

0

Zaraz sprawdzę to co napisałeś.

0

zapomniałem cudzysłowi, teraz już powinno być ok

0

Dzięki, działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1