Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.28;
Скачать: CL | DM;

Вниз

Подскажите плиз, как мне добавлять записи, в базу проверяя при этом, если она уже или нет?   Найти похожие ветки 

 
Фэ ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.01 c
14-90641
Knight
2002-01-10 10:14
2002.02.28
Гостевуха на Народе получет сообщения не со своей страницы?


1-90615
Alex Nazarenko
2002-02-12 07:33
2002.02.28
Отчеты для матричного принтера


3-90483
Леша
2002-02-04 05:26
2002.02.28
Подскажите как определить время запроса в MSSQL с точность до миллисекунды


3-90458
Johnmen
2002-01-31 12:24
2002.02.28
Фильтрация НД


14-90663
Light Elf
2002-01-15 20:15
2002.02.28
Регулярные выражения