Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.07.2009, 11:01
RASMUSA RASMUSA вне форума
Прохожий
 
Регистрация: 01.07.2009
Сообщения: 1
Репутация: 10
По умолчанию Нужна помощь с работой 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: Теги и еще раз теги!

Последний раз редактировалось Admin, 01.07.2009 в 11:15.
Ответить с цитированием
  #2  
Старый 01.07.2009, 12:47
Аватар для Appolon
Appolon Appolon вне форума
Новичок
 
Регистрация: 10.01.2008
Адрес: гЕйск
Сообщения: 76
Репутация: 16
По умолчанию

Все правильно команда 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  
Старый 01.07.2009, 17:30
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Чтобы не заморачиваться с проблемами сортировок - лучше всего использовать UNIQUE индекс по какому-то ключевому полю даже в DBF.
Кстати, объект xBase (1С:Предприятие) тоже будет работать более корректно с индексированным файлом.
Ответить с цитированием
  #4  
Старый 01.07.2009, 17:42
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

В догонку ...
И, вероятно, данные добавлять лучше с использованием 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  
Старый 01.07.2009, 17:45
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

В догонку-2.
По поводу обмена инфой 1С:Предприятие.
Где-то в Инете есть книга:
"Delphi и 1С:Предприятие. Программирование информационного обмена"
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter