Delphi下物理删除dBase数据库的*.dbf文件

{ ************************************************************ }
{                                                                                                              }
{ 数据库操作实例                                                                                          }
{                                                                                                              }
{ Date:2012-12-13    Author:Phantom0917    Addr:NJ   Modify:2012-12-14    }
{                                                                                                              }
{ ************************************************************ }

{ ************************************************************* }
{      调用BDE函数DbiPackTable物理删除dBase的*.dbf格式的数据              }
{      使用DbiPackTable函数前在uses中引入DbiTypes,DbiErrs,DbiProcs        }
{ ************************************************************* }

unit untDelVFP;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, DBTables,DbiTypes,DbiErrs,DbiProcs, ADODB;

type
  TfrmDelVFP = class(TForm)
    btnDeldBase: TButton;
    DBaseTable: TTable;
    ADOQuery1: TADOQuery;
    procedure btnDeldBaseClick(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmDelVFP: TfrmDelVFP;
  DBConnVFP: TADOConnection = nil;
implementation

{$R *.dfm}


procedure TfrmDelVFP.btnDeldBaseClick(Sender: TObject);
var
    Error: DbiResult;
    ErrorMsg: String;
    Special: DBIMSG;

begin
  {**通过ADO方式连接dBase数据库,使用SQL语句delete软删除*.dbf数据**}
  {**打开*.dbf文件会发现数据已经“清空”,但文件大小还是和删除前一样,没有变化**}
  {**因为通过SQL语句去删除,只是做了一个删除标记,并没有物理删除数据**}
  if DBConnVFP = nil then
    DBConnVFP := TADOConnection.Create(nil);
  if DBConnVFP.Connected <> True then
  begin
    DBConnVFP.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data Source=dBASE Files;Initial Catalog='+extractfilepath('');
    DBConnVFP.KeepConnection := True;
    DBConnVFP.LoginPrompt := False;
    try
      DBConnVFP.Connected := True;
    except
      showmessage('数据库连接失败!');
      Exit;
    end;
  end;
    ADOQuery1.Close;
    ADOQuery1.Connection := DBConnVFP;
    ADOQuery1.SQL.Text := 'delete from cbq';
    ADOQuery1.ExecSQL;

    {**通过BDE的DbiPackTable函数进行物理删除**}
    {**使用前要在uses中加入DbiTypes,DbiErrs,DbiProcs**}
    //确定要删除表的位置
    DBaseTable.Active:=False;
    DBaseTable.DatabaseName  := extractfilepath('');
    DBaseTable.TableName :='cbq.DBF';
    DBaseTable.Active:=true;

    DBaseTable.Close;
   //调用BDE的DbiPackTable函数
   try
      DBaseTable.Exclusive := True;
      DBaseTable.Active := True;
      Error := DbiPackTable(DBaseTable.DBHandle, DBaseTable.Handle, nil, szdBASE, True);
      DBaseTable.Active := False;
      DBaseTable.Exclusive := False;
   finally
       DBaseTable.Active := True;
   end;
   case Error of
         DBIERR_NONE:
                   ErrorMsg := 'Successful';
         DBIERR_INVALIDPARAM:
                   ErrorMsg := 'The specified table name or the pointer to the table name is NULL';
         DBIERR_INVALIDHNDL:
                   ErrorMsg := 'The specified database handle or cursor handle is invalid or NULL';
         DBIERR_NOSUCHTABLE:
                   ErrorMsg := 'Table name does not exist';
         DBIERR_UNKNOWNTBLTYPE:
                   ErrorMsg := 'Table type is unknown';
         DBIERR_NEEDEXCLACCESS:
                   ErrorMsg := 'The table is not open in exclusive mode';
   else
        DbiGetErrorString(Error, Special);
        ErrorMsg := '[' + IntToStr(Error) + ']: ' + Special;
   end;
   {**************************************}
   {*****物理删除结束后要把Table关闭******}
   {**如果不关闭,程序不退出,直接打开.dbf文件会提示**}
   {**文件正在使用,‘**.dbf正处于锁定状态,“另一用户”正在编辑。。**}
    DBaseTable.Active := False;
    DBaseTable.Exclusive := False;

    MessageDlg(ErrorMsg, mtInformation, [mbOk], 0);
end;

end.

转载于:https://www.cnblogs.com/phantom0917/archive/2012/12/14/2817539.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1060. 有序数组中的缺失元素(二分查找)

文章目录1. 题目2. 解题2.1 一次遍历2.2 二分查找1. 题目 给出一个有序数组 A&#xff0c;数组中的每个数字都是 独一无二的&#xff0c;找出从数组最左边开始的第 K 个缺失数字。 示例 1&#xff1a; 输入&#xff1a;A [4,7,9,10], K 1 输出&#xff1a;5 解释&#xff1…

iOS代码工具箱

判断日期是不是同一天&#xff0c;不要求是小时、分钟要一样。from&#xff1a;http://www.oliverfoggin.com/nsdate-isequaltodatetounitgranularity/?utm_sourceiOSDevWeekly&utm_campaigniOS_Dev_Weekly_Issue_115&utm_mediumemail #import <Foundation/Foundat…

python天气预报官网_python 实现对天气预报官网未来一周七天的天气情况抓取

通过HTMLPaser和urlib模块对网页进行抓取并分析实现步骤&#xff1a;1、自定义MYHTMLParser类2、实例化类并访问天气预报官网3、抓取关键数据4、对数据进行切片处理并输出字典from html.parser import HTMLPaser #处理页面模块from urllib import request #访问网站模块L […

LeetCode 536. 从字符串生成二叉树(递归)

文章目录1. 题目2. 解题1. 题目 你需要从一个包括括号和整数的字符串构建一棵二叉树。 输入的字符串代表一棵二叉树。 它包括整数和随后的0&#xff0c;1或2对括号。 整数代表根的值&#xff0c;一对括号内表示同样结构的子树。 若存在左子结点&#xff0c;则从左子结点开始…

LeetCode 1062. 最长重复子串(二分查找)

文章目录1. 题目2. 解题1. 题目 给定字符串 S&#xff0c;找出最长重复子串的长度。如果不存在重复子串就返回 0。 示例 1&#xff1a; 输入&#xff1a;"abcd" 输出&#xff1a;0 解释&#xff1a;没有重复子串。示例 2&#xff1a; 输入&#xff1a;"abbaba…

测试工具的选择和使用

Parasoft白盒测试工具集 工具名支持语言环境简介JtestJava代码分析和动态类、组件测试JcontractJava实时性能监控以及分析优化C TestC,C代码分析和动态测试CodeWizardC,C代码静态分析InsureC,C实时性能监控以及分析优化.test.Net代码分析和动态测试Compuware白盒测试工具集 工具…

ios定位权限plist_iOS-info.plist 中添加定位权限

一般在项目中添加权限只需要看这一篇文章&#xff1a;https://www.jianshu.com/p/2a309504cec8 就够了&#xff0c;但是位置权限说明有点麻烦&#xff0c;现总结如下&#xff0c;方便后期使用。定位权限一般有四个&#xff1a;NSLocationWhenInUseUsageDescriptionNSLocationAl…

iOS 6 的5个新特性创建杀手级应用

下面是5个iOS 6 的新特性&#xff0c;可以根据需要集成到新的App中&#xff1a; 1. Sharing 一个新的Social 框架&#xff0c;提供了简单的接口访问用户的social media账户&#xff0c;如Twitter、Facebook和中国的微博服务等等。你可以手工处理&#xff0c;或者简单实用UIKit的…

LeetCode MySQL 1174. 即时食物配送 II

文章目录1. 题目2. 解题1. 题目 配送表: Delivery -------------------------------------- | Column Name | Type | -------------------------------------- | delivery_id | int | | customer_id | int | | o…

python的魔法_python魔法方法大全

魔法方法含义基本的魔法方法__new__(cls[, ...])1. __new__ 是在一个对象实例化的时候所调用的第一个方法2. 它的第一个参数是这个类&#xff0c;其他的参数是用来直接传递给 __init__ 方法3. __new__ 决定是否要使用该 __init__ 方法&#xff0c;因为 __new__ 可以调用其他类的…

存储过程语法

View Code 存储过程如同一门程序设计语言&#xff0c;同样包含了数据类型、流程控制、输入和输出和它自己的函数库。--------------------基本语法--------------------一.创建存储过程 create procedure sp_name() begin ......... end二.调用存储过程 1.基本语法&#xff1a…

LeetCode MySQL 1158. 市场分析 I

文章目录1. 题目2. 解题1. 题目 Table: Users ------------------------- | Column Name | Type | ------------------------- | user_id | int | | join_date | date | | favorite_brand | varchar | ------------------------- 此表主键是 user_i…

sqlite 数据量_向SQLite批量导入csv,txt数据

将csv或者txt格式的文件导入SQLite一般有两种方式&#xff1a;使用pandas.readcsv()读取后&#xff0c;用to_sql方法写入数据库使用SQLiteStudio创建表格&#xff0c;再导入数据但是这两种方法在数据量比较大的时候会非常慢&#xff0c;这里提供一种使用官网提供的SQLite.exe命…

ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL(转)

http://www.cnblogs.com/John-Connor/archive/2012/05/03/2478821.html 引言-- 在初级篇中&#xff0c;我们介绍了如何利用基于ASP.NET MVC的Web程序中的Global文件来简单的重写路由。也介绍了它本身的局限性-依赖于路由信息中的键值对: 如果键值对中没有的值&#xff0c;我们无…

LeetCode MySQL 580. 统计各专业学生人数

文章目录1. 题目2. 解题1. 题目 一所大学有 2 个数据表&#xff0c;分别是 student 和 department &#xff0c;这两个表保存着每个专业的学生数据和院系数据。 写一个查询语句&#xff0c;查询 department 表中每个专业的学生人数 &#xff08;即使没有学生的专业也需列出&a…

python数据抓取技术与实战训练_师傅带徒弟学Python:项目实战1:网络爬虫与抓取股票数据...

本视频基于**Python 3.X版本本视频课程是第四篇第一个实战项目&#xff0c;内容包括网络爬虫技术、使用urllib爬取数据、使用Selenium爬取数据、使用正则表达式、使用BeautifulSoup库、MySQL数据库、Python访问数据库、Lambda表达式和多线程。目录&#xff1a;22.1 网络爬虫技术…

gPodder 3.4 发布,播客接收器

gPodder 3.4 修复了 Youtube 和 Vimeo 下载的问题&#xff0c;更新了 Flattr 集成&#xff0c;性能和 UI 方面的改进等。 gPodder是播客接收器&#xff0c;采用Python和PyGTK开发。它帮你管理播客RSS供稿&#xff0c;并自动下载您想要的所有的播客许多资料。如果你对某个 供稿R…

LeetCode 1522. Diameter of N-Ary Tree(递归)

文章目录1. 题目2. 解题1. 题目 Given a root of an N-ary tree, you need to compute the length of the diameter of the tree. The diameter of an N-ary tree is the length of the longest path between any two nodes in the tree. This path may or may not pass thro…

python控制条件语句_Python条件控制语句

一、条件判断语句(if语句)执行的流程if语句在执行时&#xff0c;会先对条件表达式进行求值判断如果为True&#xff0c;则执行if后的语句如果为False&#xff0c;则不执行语法&#xff1a;if 条件表达式&#xff1a;代码块代码块代码中保留着一组代码&#xff0c;同一个代码块中…

LeetCode MySQL 1355. 活动参与者(any函数)

文章目录1. 题目2. 解题1. 题目 表: Friends ------------------------ | Column Name | Type | ------------------------ | id | int | | name | varchar | | activity | varchar | ------------------------ id 是朋友的 id 和该表的主…