我正在尝试将Act 2000中的数据转换为MySQL数据库.我已成功将DBF文件导入到各个MySQL表中.但是我遇到了*.BLB
文件问题,这似乎是一个非标准的备忘录文件.
DBF文件将自己标识为dbase III Plus,无备注格式.有一个*.BLB
是一个备忘录文件,供多个DBF共享BLOB数据.
如果您阅读本文档:http://cicorp.com/act/sdk/ACT6-SDK-ChapterA.htm#_Toc483994053)
您可以看到该REGARDING
列是一个6个字符的列.描述如下:该6字节字段由系统提供,并包含对二进制大对象(BLOB)数据库中字段的引用.
现在打开后*.BLB
我可以看到块大小是64字节.所有文本块都以NULL填充到该大小.
我绊倒的地方是尝试将存储在REGARDING列中的值转换为阻止BLB文件中的位置.我的假设是6个字符字段是偏移量.
例如,REGARDING的一个值是,(忽略方括号): [ ",J$]
在我的谷歌搜索中,我发现了这个:http: //ulisse.elettra.trieste.it/services/doc/dbase/DBFstruct.htm#C1.5
它解释了在备注字段中(至少在普通的DBF文件中)空格值是忽略的(即它填充了列).
因此,如果我是正确的(再次,方括号)[",J$]
应该是我的BLB文件中的偏移量.幸运的是我仍然可以访问原始的ACT2000软件,所以我可以比较程序/ MySQL和BLB文件中的全文.
使用我的示例值,我知道具有REGARDING
值的DB行[ ",J$]
对应于1024字节偏移(或16个块,假设我猜测64字节大小的块).
我已经尝试阅读一些Python代码,用于读取DBF文件的开源项目 - 但我已经掌握了.
我想我需要做的是将字符解包为二进制,但我不确定.
如何根据DBF
文件中的内容找到基于64块的点读取?
由杰里道奇编辑
我试图将此字段中的字符串反向工程为十六进制值,然后使用整数值StrToInt64
,但结果仍然与blob文件不匹配.我也试过将这个整数值乘以64而不是相乘,但是结果会在blob文件的大小之外结束,而不是实际找到任何数据.
例如,___/BD
(_
= space)的值转换为$2f4244
十六进制,后者又转换为整数值3097156
,但不与blob文件中的任何相关数据部分相对应,即使乘以或除以64也是如此.
我有一个DBF文件,正在尝试从C#代码读取它。我可以成功读取文件而无需对varchar类型字段应用任何条件或条件。我的问题是我必须从Date字段(类型:date)中过滤记录。我尝试过以下方法
SELECT * FROM D:\DBFreader\file.dbf where [RDATE] between 2/16/2006 12:00:00 AM and 2/20/2006 12:00:00 AM
Run Code Online (Sandbox Code Playgroud)
上面给出了语法错误:缺少运算符
SELECT * FROM D:\DBFreader\file.dbf where [RDATE] between '2/16/2006 12:00:00 AM' and '2/20/2006 12:00:00 AM'
Run Code Online (Sandbox Code Playgroud)
上面给出了数据类型不匹配错误
SELECT * FROM D:\DBFreader\file.dbf where [RDATE] between 2/16/2006 and 2/20/2006
Run Code Online (Sandbox Code Playgroud)
上面的方法不会引发任何异常,但是尽管有匹配的记录,但不会返回任何记录。
where子句也发生相同的情况。我该怎么做才能过滤范围内的记录
我正在使用以下代码阅读
OdbcCommand cmd = new OdbcCommand();
OdbcDataAdapter da = new OdbcDataAdapter();
DataTable dt = new DataTable();
using (OdbcConnection connection = new OdbcConnection(connstring))
{
connection.Open();
cmd = new OdbcCommand(@"SELECT * FROM D:\DBFreader\file.dbf where [RDATE] between 2/16/2006 12:00:00 AM …
Run Code Online (Sandbox Code Playgroud) 我有一个 Excel“应用程序”,用户可以在其中添加/编辑/等。数据。准备好后,他们导出这些数据,最终的交付成果需要是 dBase 文件。由于 Excel 2007 不再具有“另存为 dBase”功能,因此我创建了以下代码来将数据导出到 Access 表。
我的 Excel 中的 VBA 有什么方法可以继续将 Access 表传输到 dBase 文件中吗?或者我需要从 Access 本身执行该步骤吗?
我试图将所有内容保留在 Excel 中,以便将来的修改尽可能容易。任何帮助表示赞赏。如果可能的话,如果该过程可以与我的导出过程同步自动化,那么从 Access 中进行操作甚至会很好。
Sub Export()
Dim dbConnection As ADODB.Connection
Dim dbFileName As String
Dim dbRecordset As ADODB.Recordset
Dim xRow As Long, xColumn As Long
Dim LastRow As Long
'Go to the worksheet containing the records you want to transfer.
Worksheets("FeedSamples").Activate
'Determine the last row of data based on column A.
LastRow = Cells(Rows.Count, 1).End(xlUp).row
'Create the connection …
Run Code Online (Sandbox Code Playgroud) 我使用OleDbDataAdapter和OleDbCommandBuilder用数据库内容填充DataSet对象,然后根据我在DataSet中所做的更改来更新数据库.问题是我得到了异常:"并发冲突:UpdateCommand影响了预期的1条记录中的0条".我找到了这个错误的解释:
由于创纪录的可能它是从SELECT语句返回后已被修改,但更新之前或DELETE语句发出后,自动生成的UPDATE或DELETE语句包含一个WHERE子句,指定它是否包含所有原始一个行仅更新值并且尚未从数据源中删除.如果自动生成的更新尝试更新已删除的行或不包含DataSet中找到的原始值,则该命令不会影响任何记录,并且会引发DBConcurrencyException.
这意味着自动生成的UPDATE命令会影响数据库中的0行.我使用paradox(db-file)数据库,除了我之外没有人改变它.我猜我的程序在某处改变了同一行两次.我想通过手动执行所有生成的查询来调试我的程序,并找到哪一个不影响任何行(因为实际上我很确定所有更改只进行一次,而bug就在其他地方))).是否可以手动运行自动生成的命令?
我的代码太大而且很复杂,不能在这里发布,但通常它的工作原理是这样的(我做了一个工作项目并从那里开始)
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;
namespace OleDBCommandBuilder
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string cs = @"Provider=Microsoft.Jet.OLEDB.4.0;";
cs += @"Data Source=C:\FOLDER\1\SPR_KMZ\;";
cs += @"Extended Properties=Paradox 5.x;";
OleDbConnection Connection = new OleDbConnection();
Connection.ConnectionString = cs;
try
{ Connection.Open(); }
catch (Exception ex)
{ MessageBox.Show("Error openning database! " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); Environment.Exit(0); }
string SQLQuery = "SELECT * FROM …
Run Code Online (Sandbox Code Playgroud) 我不知道为什么我无法使用带有“Flat Tiles (CSV/DBF)”内置 JDBC 驱动程序的 DBeaver 连接到 .DBF 文件。
我有一个共享驱动器,上面有数十个 DBF 文件。我创建了如附图所示的连接,但是当我连接到源时,我遇到了两个问题。我已经包含了我遵循的步骤以及我收到的错误。
有没有人有使用 JDBC 连接到 DBF 文件和/或使用 DBeaver 工具的经验,这可能对我有帮助?
我确实从 GitHub 下载了 DANS-DBF 库 JAR,但我不确定在这种情况下如何使用它。我注意到这个网站上写着
CsvJdbc 需要 Java 版本 1.6 或更高版本。要读取 DBF 文件,必须下载 DANS DBF 库并将其包含在 CLASSPATH 中。
但我不确定如何将其添加到 DBeaver 项目中。它们不像实际的 java 项目那样使用构建路径。
(我知道我可以在excel中打开它们,但我更喜欢这个工具来进行数据查询)。
驱动程序属性只有 .CSV 我尝试使用此设置,当它不起作用时,我将其更改为 .dbf 但它仍然不起作用
我可以很好地连接到这个文件夹,并且我知道其中有大量的 DBF 文件。
我现在使用ESRI shapefile格式,我在更改/编辑数据库字段大小时遇到了一些问题.我创建了一个200长度/大小的字段,现在我希望它只有80长度/大小(空间和其他改进).
但是我不能再编辑字段大小了:(有人可以指出如何更改字段大小?
顺便说一下,我尝试过可以编辑字段大小的实用工具,例如DBF Explorer,但是当我在字符/文本字段上更改字段大小时,浮点数/数字字段上的数据会被删除:(
DBF Explorer
PS:ESRI数据库使用.dbf扩展,我认为它是DBASE III plus或DBASE IV格式
我有一个非常大的dBase文件(1.64Gb).使用标准foreign::read.dbf()
函数在R中加载整个文件需要很长时间.我想在数据集中只加载一些变量.有没有人有办法解决吗 ?
我必须使用 ADOConnection 和 AdoTable 从旧的 dBase 数据库中复制一些信息。我可以打开所有表,但出现此异常
数据提供者或其他服务返回 E_FAIL 状态
在尝试打开一个 1.01 GB(1 093 588 624 字节)的大表时。我注意到性能非常糟糕。这是连接字符串
ConnectionString:=Format('Provider=Microsoft.JET.OLEDB.4.0;Data Source=%s;Extended Properties=dBase IV;',[path])
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用php连接dbf数据库.我尝试了几种不同的方式,没有运气.
PHP:5.3.8文件:C:\ xampp\htdocs\work\vcabdoc.dbf
创建数据源dbvfp,驱动程序C:\ Windows\system32\vfpodbc.dll
用过的 $odbc = odbc_connect ('dbvfp', '', '') or die('Could Not Connect to ODBC Database!');
Warning: odbc_connect() [function.odbc-connect]: SQL error: [Microsoft][ODBC Visual FoxPro Driver]File c:\xampp\htdocs\work\vcabdoc.dbf is not a database., SQL state S1000 in SQLConnect in C:\xampp\htdocs\WORK\odbc.php on line 5
Run Code Online (Sandbox Code Playgroud)
include('\xampp\php\PEAR\adodb\adodb.inc.php');
include_once('\xampp\php\PEAR\adodb\adodb-pager.inc.php');
session_start();
$db = ADONewConnection('vfp');
$dsn="Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=C:\\xampp\\htdocs\\work\\vcabdoc.dbf;Exclusive=No;";
$db->Connect($dsn) or die('nope');
$db->SetFetchMode(ADODB_FETCH_ASSOC);
$query = "Select * from vcabdoc.dbf";
$rs = $db->Execute($query);
echo 'e';
while (!$rs->EOF) {
print_r($rs->fields);
$rs->MoveNext();
Notice: Trying to get property …
Run Code Online (Sandbox Code Playgroud)