Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Вниз

Удаление записей из 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.04 c
11-1065719451
Wiz@rd
2003-10-09 21:10
2004.05.02
Как сделать прокси?


1-1082015049
evg_nib
2004-04-15 11:44
2004.05.02
Иерархический DBgrid как в 1С?


1-1081933960
LameFox
2004-04-14 13:12
2004.05.02
Не пашет Image1.Picture.LoadFromFile(...);


1-1081806423
noob
2004-04-13 01:47
2004.05.02
потверждение при закрытии формы


14-1081674366
Тимур
2004-04-11 13:06
2004.05.02
Война и мир





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский