Форум: "Базы";
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];
ВнизПодскажите плиз, как мне добавлять записи, в базу проверяя при этом, если она уже или нет? Найти похожие ветки
← →
Фэ (2002-02-04 23:39) [4]Ok (типа Paradox)
Проектируем вначале таблицу().
Поля:
ID: ftInteger или ftAutoInc (Integer: 4 байта) - первичный ключ (искусственный, позволяет ссылаться на запись из других таблиц)
DREC: ftDate (TDate: double)- дата
HRS: ftWord или ftString (Word: 2 байта или Char(1)) - номер часа 1..24
FLD1: ftString ( string[4]) - Ваши значения 0909
FLD2: ftString ( string[4]) - Ваши значения..
и т.д
Итого
CREATE TABLE "EXAMPLE.DAT"
(
"ID" INTEGER,
"DREC" DATE,
"HRS" CHARACTER(1),
"FLD1" CHARACTER(4),
"FLD2" CHARACTER(4),
"FLD3" CHARACTER(4),
PRIMARY KEY ("ID")
);
CREATE UNIQUE NOCASE INDEX "UNIQ" ON "EXAMPLE.DAT" ("DREC","HRS","FLD1","FLD2","FLD3");
Далее, предположим, что Вы как-то получили массив lst: TStringList;
Организуем цикл по добавлению записей
Но предварительно, формируем SQL текст запроса
with query.sql do begin
Clear;
Add("INSERT INTO EXAMPLE (ID , DREC , HRS , FLD1 , FLD2 , FLD3)");
Add("VALUES (:ID , :DREC , :HRS , FLD1 , FLD2 , FLD3)");
end;
// не зря пробелом разделены запятые - иногда помогает
for i:=0 to lst.Count-1 do
Парсим каждую строку на свой line: TStringList (по пробелам или как-еще Ch)
line := ParseOnCh(lst[i],Ch); // придумаешь как
Каждую строку переводим в свой тип данных
// 10.10.10 01:00:04 0909 0234 0565
dt: TDate dt := StrToDate(line[0]);
hrs: string; hrs := IntToStr(round(24*Frac(StrToDateTime(line[0]+" "+line[1]))));
fld1,fld2,fld3: string; fld1 := line[2] ...
// Не обязательно так "сложно"
with query do begin
Params[0].AsInteger := id; // либо автоинкремент
Params[1].AsDateTime := dt;
Params[2].AsString := hrs;
Params[3].AsString := fld1;
Params[4].AsString := fld2;
Params[5].AsString := fld3;
end;
// Здесь выполняем
query.Prepare;
tryExecSQL_(query);
// Если напарываемся на ошибку - делаем вид, что из-за неуникальности записи и пропускаем.
// либо можно анализировать причину ошибки и т.д.
function tryExecSQL_(qu: TQuery): boolean;
begin
Result := True;
with qu do
try
ExecSQL;
except
on E: Exception do begin
Result := False;
end;
end;
end;
Рпт до окончания цикла
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.02.28;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c