|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Нужна помощь с работой DBF
Прошу прощения за беспокойство, но никак не могу найти функции работы с 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; From VasYa with LoVe... |
#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С:Предприятие. Программирование информационного обмена" |