Войти

Показать полную графическую версию : Не добавляются записи в НД


Kuzya_jr
13-07-2004, 04:54
Тут такая проблемка.
вот этот код:

procedure Tstart_frm.Button1Click(Sender: TObject);
var
* *Values:OLEVariant;
* *excel,workbook,sheet:variant;
* *iRow,q:integer;
begin
excel:=CreateOleObject('Excel.Application');
workbook:=excel.Workbooks.Open(OpenDialog1.FileName);
sheet:=workbook.worksheets.item[1];
Values:=sheet.UsedRange.Value;
maxCol:=sheet.UsedRange.Columns.Count; * * * * *// ñòîëáöû.
maxRow:=sheet.UsedRange.Rows.Count; * * * * * * * // ñòðîêè.

for iRow:=strtoint(MaskEdit1.text) *to maxRow-strtoint(MaskEdit1.text) *do
* *DM.New.AppendRecord([Values[iRow,1], Values[iRow,2],Values[iRow,3],Values[iRow,4],Values[iRow,5] Values[iRow,6]]);

excel.quit;
end;


Не хочет добавлять записи в мою таблицу :(.
Таблицу создавал в DatabaseDesktop'е. Таблица Paradox7.
По идее, при нажатии этой кнопки, в неё должны занаситься данные из екселевского прайса (5000 пунктов). В DBGrid1 всё нормально отображается, типа вроде добавилось, но файл new.db как занимал 2кб, так и продолжает занимать :(. При повторном запуске проекта - нет ни одной записи :(. Я пробовал и InsertRecord, и по частям:
DM.New.insert;
DM.New['art']:=Values[iRow,1];
...
DM.New.Post;

Ничего не работает :(. Подскажите где ошибка?

P.s.: Delphi 6.0

Исправлено: m007kuzya, 4:55 13-07-2004

hasherfrog
13-07-2004, 10:59
В DBGrid1 всё нормально отображается, типа вроде добавилось
Может, ему Save какой-гибудь сказать?

Kuzya_jr
13-07-2004, 17:05
Ну ды команда DM.New.Post и есть фиксация сделанных изменений. А команда DM.New.AppendRecord автоматически фиксирует изменения. Так в книжке и хелпе написано. Или есть какие-то другие способы save ?

hasherfrog
14-07-2004, 09:42
Нда-с, давненько не брал я в руки шашек :)
1. Попробуйте создать не Paradox, а какой-нибудь dBase. На парадокс много жалоб (вроде как).
2. При закрытии формы проделайте что-то вроде
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var Loop: Integer;
begin
 {Generic way of ensuring all table changes are saved when form is closed}
 for Loop := 0 to ComponentCount - 1 do
  if Components[Loop] is TDataSet then
    with TDataSet(Components[Loop]) do
      if State in dsEditModes then
        Post;
end;
3. Я не вижу, в каком месте Вы открываете базу. Может, Вы пишите не в new.db, а в какой-нибудь new1.db :) ?

Kuzya_jr
23-07-2004, 16:31
3. Я не вижу, в каком месте Вы открываете базу. Может, Вы пишите не в new.db, а в какой-нибудь new1.db  ?

Я базу открывал в дельфе, поместив в свойство Active таблицы new (TTable) значение True.

Короче проблема решилась довольно просто. В этом-то и была загвоздка. Я проэкт запускал только из дельфи, по F9. А когда я запустил екзешник - всё нормально работает (только при закрытой дельфе). Когда я закрыл базы, и стал открывать их на onActivate формы - всё заработало как надо. Я так понял грабли тут из-за совместного (многопользовательского?) доступа к таблице т.к. сама дельфи, тоже считается клиентом и это порождает всякие глюки... Но я не уверен.




© OSzone.net 2001-2012