![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Прошу прощения за беспокойство, но никак не могу найти функции работы с dbf. Требуется из qwery создать файл и перенести туда qwery, чтобы потом открыть этот файл в 1С. Когда использую метод insert все пишется почему то, в первую ячейку! кто работал с dbf подскажите!
Вот иходник: Код:
tWast:=TTable.Create(nil);
tWast.TableType:=ttDBase;
tWast.TableName:='DIMON.DBF';
tWast.FieldDefs.Add('DATE',ftString,50,FALSE);
tWast.FieldDefs.Add('MASSA',ftstring,50,FALSE);
tWast.FieldDefs.Add('NOM',ftString,50,FALSE);
tWast.CreateTable;
tWast.Active := true;
for i:=1 to 3 do
begin
tWast.Insert;
twast.FieldByName('DATE').AsString:='3';
twast.FieldByName('MASSA').AsString:='2';
twast.FieldByName('NOM').AsString:='1';
tWast.Post;
end;
tWast.Free;Последний раз редактировалось Admin, 01.07.2009 в 11:15. |
|
#2
|
||||
|
||||
|
Все правильно команда insert добавляет строчку в начало таблицы.
Если тебе надо что б она добавлялась в конце, то используй Append/ Код:
for i:=1 to 3 do
begin
tWast.Append;
twast.FieldByName('DATE').AsString:='3';
twast.FieldByName('MASSA').AsString:='2';
twast.FieldByName('NOM').AsString:='1';
tWast.Post;
end; |
|
#3
|
|||
|
|||
|
Чтобы не заморачиваться с проблемами сортировок - лучше всего использовать UNIQUE индекс по какому-то ключевому полю даже в DBF.
Кстати, объект xBase (1С:Предприятие) тоже будет работать более корректно с индексированным файлом. |
|
#4
|
|||
|
|||
|
В догонку ...
И, вероятно, данные добавлять лучше с использованием TQuery, а не TTable. Что-то вроде : Код:
function Insert_Record_in_Table(an,tn : string; ListData : TStrings; YesParamCheck : boolean = false) : boolean;
//Вставить строку в таблицу Б.Д. (без MEMO-полей)
//an - Alias BDE-5
//tn - Имя таблицы базы данных
//ListData - значения полей в формате: ИмяПоля=ЗначениеПоля
// (если тип поля - строка или дата, то значения должны быть окаймлены одинарными или двойными кавычками)
//YesParamCheck - значение соотв. свойства ParamCheck компонента TQuery
//Возвращаемое значение - true, если успешно
Var
Yes : byte;
i : integer;
Sx,sFN,sVal : string;
Q : TQuery;
begin
Result:=FALSE;
an:=trim(an);
tn:=trim(tn);
if ListData<>NIL then begin
if ListData.Count>0 then begin
if (length(tn)>0) then begin
sFN:='';
sVal:='';
for i:=0 to (ListData.Count-1) do
begin
Sx:=trim(ListData.NAMES[i]);
if length(Sx)>0 then begin
sFN:=sFN+Sx;
Sx:=trim(ListData.VALUES[Sx]);
sVal:=sVal+Sx;
if i<(ListData.Count-1) then begin
sFN := sFN+',';
sVal := sVal+',';
end;
end;
end;
Yes := 0;
Q:=TQuery.Create(NIL);
TRY
Q.DatabaseName:=an;
Q.ParamCheck:=YesParamCheck; //!!!
Q.SQL.ADD('INSERT INTO '+tn);
Q.SQL.Add('(');
Q.SQL.Add(sFN);
Q.SQL.Add(')');
Q.SQL.Add('VALUES');
Q.SQL.Add('(');
Q.SQL.Add(sVal);
Q.SQL.Add(')');
Q.ExecSQL;
Yes := 1;
Result:=TRUE;
FINALLY
if Q<>NIL then begin
if Yes<=0 then begin
ShowMessage('Error! '+#10+Q.SQL.TEXT);
end;
Query_Clear(Q);
end;
END;
end;
end;
end;
end;
|
|
#5
|
|||
|
|||
|
В догонку-2.
По поводу обмена инфой 1С:Предприятие. Где-то в Инете есть книга: "Delphi и 1С:Предприятие. Программирование информационного обмена" |