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

Вниз

Удаление записей из dbf   Найти похожие ветки 

 
wild_arg ©   (2004-04-07 17:12) [0]

Необходимо через ADO удалить все записи из некоего файла, типа "таблица.dbf".
Пробовали через ADOQuery, типа "Delete from Таблица.dbf" - он в dbf-нике помечает все записи на удаление.
ADOTable.DeleteRecords - тоже ничего не дал, вообще выкинул какую-то ошибку

Можно как-то реально удалить все записи?


 
Anatoly Podgoretsky ©   (2004-04-07 17:19) [1]

А ты эту ошибку тоже зря выкинул.


 
wild_arg ©   (2004-04-07 17:25) [2]

Выкинутая ошибка: Operation is not allowed in this context


 
Семен Сорокин ©   (2004-04-07 17:26) [3]

Так паковать же надо dbf после удаления.


 
Семен Сорокин ©   (2004-04-07 17:29) [4]

используй драйвер microsoft FoxPro VFP Driver (*.dbf) там есть метод Pack или пересозданием таблицы.


 
wild_arg ©   (2004-04-07 17:36) [5]

2Семен Сорокин
есть только ADO и ОDBC :) с этим инструментарием можно по...удалять все записи. Если можно, то приведите отрывок кода.


 
Anatoly Podgoretsky ©   (2004-04-07 17:38) [6]

wild_arg ©   (07.04.04 17:36) [5]
Можно - Delete from Table.dbf


 
wild_arg ©   (2004-04-07 17:41) [7]

2Anatoly Podgoretsky
см. выше :) самый первый пост - такое уже пробовали


 
Anatoly Podgoretsky ©   (2004-04-07 17:43) [8]

Ну и что, во первых у меня немного по другому, во вторых это работает только в правильно написанной программе, про твою ничего неизвестно.


 
wild_arg ©   (2004-04-07 17:52) [9]

2Anatoly Podgoretsky
Слушай, чё за необоснованные наезды? Чего там может быть неправильного?

with TADOQuery.Create(Self) do begin
 Connection := ADOConnection1;
 SQL.Text   := "delete from Таблица.dbf";
 Execute;
 Free;
end;


Не факт, что здесь приведено правильно - это я здесь написал - но принцип тот же. О правильности кода сужу потому, что он записи в таблице обрабатывает, но только лишь помечает на удаление. Ведь если бы код был некорректен - то он бы ничего не делал, либо вызывал ошибки.


 
Anatoly Podgoretsky ©   (2004-04-07 17:56) [10]

Это вся программа?
Насчет ошибок, значит ты обманывал, когда говорил, что выдает какую то ошибку, а сейчас оказывается не выдает.
Тут еще и не иввестное ADOConnection1


 
Семен Сорокин ©   (2004-04-07 18:17) [11]

Anatoly Podgoretsky ©   (07.04.04 17:56) [10]
хватит над человеком прикалываться :))
wild_arg ©   (07.04.04 17:12)
тебе проще сделать SELECT INTO в новую таблицу, а старую удалить.


 
Anatoly Podgoretsky ©   (2004-04-07 19:13) [12]

Семен Сорокин ©   (07.04.04 18:17) [11]
А зачем так делать, когда Delete From Table прекрасно работает?
А ты ему на порядок более сложную задачу подсовываешь.


 
AndrewK ©   (2004-04-08 09:21) [13]

Вот такая процедура выдает сообщение Operation is not allowed in this context


procedure TfrmDlgExportCompanyToLotus.ExportCompanyList;
var I : Integer;
   vODBC : TADOTable;
   vStep, vCurPos : Real;
begin
 dbConn.ConnectionString := "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN="+Trim(edtODBC.Text)+";DriverId=533;FIL=dBase 5.0;MaxBufferSize=2048;PageTimeout=5;"";
 dbConn.Connected := True;

 Gauge.MaxValue := 100;
 Gauge.Progress := 0;
 vCurPos        := 0;

 with DM.spOpen("_exp_spCompanyListToLotus", []) do
 try
   btnOK.Enabled      := False;
   btnCancel.Enabled  := False;
   Screen.Cursor      := crHourGlass;
   vStep              := 100 / RecordCount;
   vODBC              := TADOTable.Create(nil);
   vODBC.Connection   := dbConn;
   vODBC.TableName    := Trim(edtTableName.Text);
   vODBC.Open;
   vODBC.DeleteRecords;
   First;
   for I := 1 to RecordCount do begin
     vODBC.Insert;
     vODBC.FieldByName("M_ID").AsInteger   := FieldByName("M_ID").AsInteger;
     vODBC.FieldByName("S_ID").AsInteger   := FieldByName("S_ID").AsInteger;
     vODBC.FieldByName("M_SNAME").AsString := FieldByName("M_SNAME").AsString;
     vODBC.FieldByName("S_SNAME").AsString := FieldByName("S_SNAME").AsString;
     vODBC.FieldByName("S_FNAME").AsString := FieldByName("S_FNAME").AsString;
     vODBC.FieldByName("TZ").AsString      := FieldByName("TZ").AsString;
     vODBC.Post;
     vCurPos := vCurPos + vStep;
     Gauge.Progress := Round(vCurPos);
     Application.ProcessMessages;
     Next;
   end;
 finally
   vODBC.Close;
   vODBC.Free;
   Free;
   dbConn.Connected  := False;
   Gauge.Progress    := 0;
   vCurPos           := 0;
   Screen.Cursor     := crDefault;
   btnOK.Enabled     := True;
   btnCancel.Enabled := True;
 end;

end;


А вот такая процедура ошибок не выдает, но и не удаляет (только помечает все записи как удаленные)

procedure TfrmDlgExportCompanyToLotus.ExportCompanyList;
var I : Integer;
   vODBC : TADOTable;
   vStep, vCurPos : Real;
begin
 dbConn.ConnectionString := "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DSN="+Trim(edtODBC.Text)+";DriverId=533;FIL=dBase 5.0;MaxBufferSize=2048;PageTimeout=5;"";
 dbConn.Connected := True;

 Gauge.MaxValue := 100;
 Gauge.Progress := 0;
 vCurPos        := 0;

 with TADOQuery.Create(nil) do
 try
   Connection := dbConn;
   SQL.Text := "Delete * from "+Trim(edtTableName.Text);
   ExecSQL;
 finally
   Free;
 end;

 with DM.spOpen("_exp_spCompanyListToLotus", []) do
 try
   btnOK.Enabled      := False;
   btnCancel.Enabled  := False;
   Screen.Cursor      := crHourGlass;
   vStep              := 100 / RecordCount;
   vODBC              := TADOTable.Create(nil);
   vODBC.Connection   := dbConn;
   vODBC.TableName    := Trim(edtTableName.Text);
   vODBC.Open;
   First;
   for I := 1 to RecordCount do begin
     vODBC.Insert;
     vODBC.FieldByName("M_ID").AsInteger   := FieldByName("M_ID").AsInteger;
     vODBC.FieldByName("S_ID").AsInteger   := FieldByName("S_ID").AsInteger;
     vODBC.FieldByName("M_SNAME").AsString := FieldByName("M_SNAME").AsString;
     vODBC.FieldByName("S_SNAME").AsString := FieldByName("S_SNAME").AsString;
     vODBC.FieldByName("S_FNAME").AsString := FieldByName("S_FNAME").AsString;
     vODBC.FieldByName("TZ").AsString      := FieldByName("TZ").AsString;
     vODBC.Post;
     vCurPos := vCurPos + vStep;
     Gauge.Progress := Round(vCurPos);
     Application.ProcessMessages;
     Next;
   end;
 finally
   vODBC.Close;
   vODBC.Free;
   Free;
   dbConn.Connected  := False;
   Gauge.Progress    := 0;
   vCurPos           := 0;
   Screen.Cursor     := crDefault;
   btnOK.Enabled     := True;
   btnCancel.Enabled := True;
 end;

end;

Вот и вопрос: как очистить файл *.dbf в версии DBase IV поностью?


 
AndrewK ©   (2004-04-08 09:58) [14]

Ну или переформулирую вопрос:  Как упаковать таблицу dbf средствами Delphi через ADO?


 
Anatoly Podgoretsky ©   (2004-04-08 10:09) [15]

Так ты не удалить хочешь, а упаковать таблицы, тогда кажется только VFP драйвер может.



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
9-1070221899
G A M E R
2003-11-30 22:51
2004.05.02
Быстрееееее


14-1081088912
Гаврила
2004-04-04 18:28
2004.05.02
Постоянная работа для программера в Москве


14-1081248757
Undert
2004-04-06 14:52
2004.05.02
Помогите с запросом


4-1078826086
MichailDalakov
2004-03-09 12:54
2004.05.02
CreateProcess


9-1069269231
Sacred
2003-11-19 22:13
2004.05.02
Нужен совет по выделению фигуры в GLScene.