使用“A Simple Delphi Wrapper for SQLite3”插入日期

2023-12-07

我正在使用 delphi 2010 和 Tim Anderson 的 SQLite3 包装器 -http://www.itwriting.com/blog/?page_id=659- 但我在插入日期时遇到问题

这是我的数据库创建

DB.ExecSql('CREATE TABLE Tags (No Integer NOT NULL, Title VarChar(25) NOT NULL, Creator VarChar(25) NULL, Born Date NULL, Charter Boolean Default False NULL, Owned Boolean Default False NULL, Image Blob NULL, CONSTRAINT PK_No PRIMARY KEY (No));');

其构建和运行良好。我用 SQLite 管理员测试了它 -http://sqliteadmin.orbmu2k.de/我什至可以使用管理员手动输入日期

这是我的插入内容

DB.ExecSql('Insert into Tags (No, Title, Creator, Born, Charter, Owned) ' +
             'values (' + quotedStr(frmTag.edtTagNo.Text) + ',' + quotedStr(frmTag.edtTitle.Text) + ',' +
                          quotedStr(frmTag.edtCreator.Text) + ',' + quotedStr(frmTag.edtBorn.Text) + ',' +
                          quotedStr(BoolToStr(frmTag.cbxCharter.Checked)) + ',' + quotedStr(BoolToStr(frmTag.cbxOwned.Checked)) + ');');

日期字段由 edtBorn 控件 (TRzDateEdit) 提供

我在插入之前检查了 edtBorn.Text 和 edtBorn.date 的值,并且日期始终正确。

我尝试过以下几种插入方式:

frmTag.edtBorn.Text 
FormatDateTime('mm/dd/yyyy',frmTag.edtBorn.Text)
quotedStr(frmTag.edtBorn.Text)
quotedStr(FormatDateTime('mm/dd/yyyy',frmTag.edtBorn.Text))

我什至尝试过使用参数

 DB.AddParamText('@ABorn', frmTag.edtBorn.Text);
 DB.AddParamFloat('@ABorn', frmTag.edtBorn.Date);

似乎没什么作用!我没有例外,但我的领域从未获得数据值!


日期和时间数据类型

SQLite 能够将日期和时间存储为 TEXT、REAL 或 INTEGER 值:

  • TEXT 作为 ISO8601 字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  • REAL 作为儒略日数,即自公元前 4714 年 11 月 24 日格林威治中午以来的天数。根据公历。
  • INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。

例如,此处显示 REAL 和 INTEGER 部分。

修改后的 SQLite3 包装器测试文件:uTestSqlite

sSQL := 'CREATE TABLE testtable ([ID] INTEGER PRIMARY KEY,[OtherID] INTEGER NULL,';
sSQL := sSQL + '[Name] VARCHAR (255),[Number] FLOAT,[Date] INTEGER, [notes] BLOB,
       [picture] BLOB COLLATE NOCASE);';
sldb.execsql(sSQL);
sldb.execsql('CREATE INDEX TestTableName ON [testtable]([Name]);');

//begin a transaction
sldb.BeginTransaction;

sSQL := 'INSERT INTO testtable(Name,OtherID,Number,Date) VALUES ("Some Name", 4,
         julianday("now"), strftime("%s","now"));';
sldb.ExecSQL(sSQL);

sSQL := 'INSERT INTO testtable(Name,OtherID,Number,Date,Notes) VALUES ("Another Name",12,
         julianday("2013-03-01"),strftime("%s","2013-03-01"), "More notes");';
sldb.ExecSQL(sSQL);

//end the transaction
sldb.Commit;

[...]

//query the data
sltb := slDb.GetTable('SELECT * FROM testtable');
if sltb.Count > 0 then
begin
//display first row
updateFields;
end;

显示值:

procedure TForm1.updateFields;
var
Notes: string;
myDate :TDateTime;

begin
ebName.Text := sltb.FieldAsString(sltb.FieldIndex['Name']);
ebID.Text := inttostr(sltb.FieldAsInteger(sltb.FieldIndex['ID']));

if TryJulianDateToDateTime(sltb.FieldAsDouble(sltb.FieldIndex['Number']),myDate)
   then
   ebNumber.Text := DateTimeToStr(myDate)
   else
   ShowMessage('Not a valid Julian date');

myDate:=UnixToDateTime(sltb.FieldAsInteger(sltb.FieldIndex['Date']));
ebDate.Text := DateTimeToStr(myDate);

[...]
end;

Output:

enter image description here

在你的问题中DB.ExecSql('CREATE TABLE Tags (..., Born Date NULL,...);');

替换为DB.ExecSql('Insert into Tags (....) VALUES (...

+ quotedStr(frmTag.edtBorn.Text) 

with

'strftime("%Y-%m-%d","'+frmTag.edtBorn.Text+'")'

的价值frmTag.edtBorn.Text一定像1975-10-21

您可以通过以下方式获取它:

ebDate.Text := sltb.FieldAsString(sltb.FieldIndex['Born']);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用“A Simple Delphi Wrapper for SQLite3”插入日期 的相关文章

  • 处理 TShellListView 后代中的文件放置

    我正在尝试创建 TShellListView 的后代 它接受从 Windows 资源管理器中删除的文件 我想在组件定义中处理拖 放操作 而不必在任何使用该组件的应用程序中实现它 我找到了接受从 Windows 资源管理器中拖放的文件的示例
  • 以编程方式重新启动 Delphi 应用程序

    应该不可能运行我的应用程序的多个实例 因此项目源码包含 CreateMutex nil False PChar ID if GetLastError ERROR ALREADY EXISTS then Halt 现在我想以编程方式重新启动我
  • SQLite创建连接时出现异常

    我在创建连接时收到 SQLite 异常 这在我安装 VS2015 RTM 之前有效 客户端 PCL databaseConnection DependencyService Get
  • 将 Android 应用程序从 Lite 升级到 Pro 版本时保持相同的 SQLite 数据库

    首先 我已经进行了搜索 但找不到我的问题的具体答案 所以这里是 我正在编写我的第一个 Android 应用程序 并计划拥有 Lite 版本 有限功能 和付费版本 完整功能 Lite 和 Pro 版本将使用相同的 SQLite 数据库结构 如
  • 如何在 SQLite 中将时间戳转换为字符串?

    我有一个表 其中存储了时间戳 以毫秒为单位 我想将这些时间戳转换为人类可读的形式 这是我的表的输出示例 SELECT date raw strftime d m Y date 1000 as string FROM my table raw
  • 每次 TDbGrid 的选定位置更改时都会触发什么事件?

    我的项目中有一个 TDbGrid 每次更改所选行时我都试图触发一个事件 行中的任何更改都已经更新了链接到同一数据源的所有数据感知控件 但还需要进行其他更改 我需要一个事件处理程序 我认为 OnColEnter 会起作用 根据帮助文件 它在以
  • Android - 在sqlite数据库中存储敏感数据

    我需要将敏感数据存储在 Android 应用程序的 sqlite 数据库中 我如何确定这些数据非常安全 我知道我可以使用密钥加密数据 但是我将该密钥存储在哪里 我也不想要求用户填写密钥 我只是希望它能够自行工作 因为我害怕逆向工程 所以我也
  • 如何更改 TPageControl 上标签的方向?

    我是 Delphi 的新手 再次强调 我在 1994 年就使用过 Delphi 我现在有 Delphi 2009 Pro 来自Java 我发现对象继承非常晦涩 我的用户想要选项卡位于左侧的选项卡式页面 但是 TPageControl 不允许
  • 如何调试仅在应用程序关闭时发生的崩溃? (德尔福)

    因此 经过最近的一些更改 我们发现我们最古老的应用程序之一有时会在关闭时崩溃 这会以 运行时错误 216 消息的形式或来自 Windows 错误报告的消息的形式表明应用程序已停止工作 该应用程序已经发出OutputDebugString 每
  • 数据库锁定在 WAL 模式下,只有读取器

    在中使用System Data Sqlite 1 0 86 0 包括SQLite 3 7 17 预写式记录 http www sqlite org wal html模式下 我在并发读取时遇到数据库锁 如果我正确理解 WAL 则不应该出现这种
  • SQL 错误:“没有这样的表”

    我试图解决为什么我的代码为所有查询返回 null 的原因 最后发现 sql 查询什么也没有返回 我使用简约代码创建了一个新的 AIR 文档 s WindowedApplication
  • 如何将纹理传递给 DirectX 9 像素着色器?

    我有像素着色器 fxc exe tiles fs T ps 3 0 Fotiles fsc Fctiles fsl struct PSInput float4 Pos TEXCOORD0 float3 Normal TEXCOORD1 fl
  • 在 Delphi 中的 SOAP 标头中发送简单字符串

    我需要发送这样的东西
  • 命名管道性能问题

    我使用命名管道进行 C 和 Delphi 之间的过程间通信 C 使用System IO Pipes包 而 Delphi 使用Libby s pipes pas 不幸的是 通信几乎是高性能的 分析显示通信占用了整个运行时间的 72 其余的用于
  • 供所有 Win32 程序员在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例

    我正在寻找良好的资源来学习使用 Win32 GDI API 或任何替代它的内容 以便使用 Win32 API 直接在玻璃窗体上进行绘制和绘制 当我使用 Delphi 时 我将其标记为 Delphi 或 Visual C 您能找到的任何代码示
  • SQLite中的ROWID是自动设置的吗?

    所以 我在 Ionic 上有这个应用程序 它使用SQLite ngCordova 插件 https github com litehelpers Cordova sqlite storage用于内部存储 在其上 我使用以下命令创建一个表 d
  • 无法在 Sqlite3 中添加默认值为 NULL 的 NOT NULL 列

    尝试将 NOT NULL 列添加到现有表时出现以下错误 为什么会发生这种情况 我尝试了 rake db reset 认为现有记录是问题所在 但即使重置数据库后 问题仍然存在 你能帮我解决这个问题吗 迁移文件 class AddDivisio
  • 如何在 iPhone 上使用带有线程的 sqlite + fdbm 库

    相关这个问题 https stackoverflow com questions 1082554 我想把数据加载放在后台 但是 我收到 库例程调用不按顺序 错误 In 这个所以线程 https stackoverflow com quest
  • 可以在滚动条上绘画吗?

    是否可以在 TMemo TListbox 等标准控件的滚动条上进行绘制 我所需要的只是在滚动条上绘制一些基本形状 并且我试图避免从 stratch 实现整个滚动内容 有什么指点吗 蒂亚 确实有可能 你可能想看一下WM NCPAINT消息 这
  • 将delphi stringgrid导出到excel

    我正在尝试将数据从delphi 7 中的stringgrid 导出到microsoft excel 我一直在使用这段代码来做到这一点 objExcel TExcelApplication Create nil objExcel Visibl

随机推荐

  • 关于理解绑定和继承的相关性

    今天我正在阅读 MDN 文档Function prototype bind 在该部分下用作构造函数的绑定函数有一个例子我不太理解 我在 Node js v 4 4 5 和 Google Chrome v58 0 3029 81 中运行了以下
  • Chromedriver 使用 Selenium 打开 1800-1900 页时显示 SBOX_FATAL_MEMORY_EXCEEDED 错误

    driver t webdriver Chrome driver t implicitly wait 5 driver t get Company intranet elem driver t find element by id j us
  • 用于转换大型 XML 文件的内存高效 XSLT

    这个问题与最近的回答 迈克尔 霍257k 这又与的回答 迪米特 诺瓦切夫 当使用上述答案中的样式表时 通过迈克尔 霍257k 对于一个大的XML 大约60MB 下面是示例XML 并且转换成功进行 当尝试另一个样式表时 与 michael h
  • Visual Studio 2013 GitHub

    我使用 Visual Studio 2013 和特定帐户将源同步到 GitHub 但在尝试使用另一个帐户时出现以下错误 发生错误 详细消息 libgit2 引发错误 类别 网络 错误 响应状态代码不表示成功 403 Forbidden 请问
  • 如何通过Python中的Beautiful Soup找到类中的文本和类名中的空格?

    例如 我有一个班级 div 和一个有空间的类 div class class name having spaces div from bs4 import BeautifulSoup doc div class the value lt d
  • 我想使用 Qxt 的跨度滑块而无需安装它。这可能吗?

    我偶然发现了一个widget它为您提供了一个带有两个手柄的滑块 以便您可以选择上限和下限之间的范围 我想使用它而不必安装所有 Qxt 因为我很确定这是我唯一需要的东西 我该如何处理 qxt p 才能独立使用这个小部件 您需要在主类中添加以下
  • 使用浏览器时,我如何知道操作系统使用哪个小数点分隔符?

    我正在开发一个网络应用程序 我需要正确显示一些十进制数据 以便可以将其复制并粘贴到不受我控制的某个 GUI 应用程序中 GUI 应用程序是区域设置敏感的 它只接受系统中设置的正确小数点分隔符 我可以猜出小数分隔符Accept Languag
  • Python 中导入模块/函数的范围

    我是新来的 不是 100 确定如何问这个问题 所以我会直接进入 我是否应该在我编写的每个函数的开头使用 import 语句来导入我需要的所有各种模块 函数对于该函数的范围 IE def func1 import os path print
  • C++ 类中的变量数组问题

    我想知道是否有一种方法可以包含一个大小不固定的数组的数据成员 函数 initModulation 将创建一个大小为 M 的 int 数组和一个大小为 M 的 Complex 数组 Complex 是另一个类 由实部和虚部组成 函数 modu
  • Django - 用户注销后通过单击浏览器后退按钮重新进入会话

    我正在 Django 上创建一个 Web 应用程序 当登录用户单击 注销 时 会正确显示注销页面 但是 当单击浏览器中的后退按钮时 用户可以再次重新进入会话 为了解决这个问题 我遵循了这篇文章 注销后禁用浏览器 后退 按钮 并使用cache
  • 错误:新创建的数据库出现磁盘 I/O 错误

    我正在尝试使用 sqlite 创建新数据库 但不断收到以下错误 sqlite3 new db SQLite version 3 3 6 Enter help for instructions sqlite gt begin immediat
  • 重新加载页面时 Redux 存储发生变化

    我正在使用 React Redux 实现两种不同类型用户的登录 这是我的登录方法 export const login credentials gt dispatch gt api user login credentials then u
  • R:计算大距离矩阵的更快方法

    我正在计算球体上大量位置 5000 之间的距离矩阵 使用半正弦距离函数 这是我的代码 require geosphere x rnorm 5000 y rnorm 5000 xy1 cbind x y 计算距离矩阵所需的时间为 system
  • 无法从 WiX 创建的 MSI 卸载程序

    使用 WiXToolSet 制作的 MSI 安装 osquery 后 使用 osquery 提供的脚本 我尝试卸载它 但失败了 它也没有在应用程序向导中显示为程序 链接到脚本 https github com osquery osquery
  • Mysql插入、更新很慢

    我们的服务器数据库是mysql 5 1 我们的数据库中有 754 个表 我们为每个项目创建一个表 因此桌子的数量很大 从过去的一周开始 我注意到任何表的插入和更新都有很长的延迟 如果我创建一个新表并插入其中 则需要一分钟才能插入大约 300
  • 如何在 React 类中使用 React hook?

    作为 JS 世界的新手 我遇到了大麻烦 我正在使用反应钩子 import useKeycloak from react keycloak web import useCallback from react export const useA
  • 在 django 模板中动态获取列表项

    我的页面上有一些循环 需要根据循环编号列出项目 当我打电话时 mylist 1 mylist 2 mylist 3 一切正常 但我真正需要的是 for x in somenumber MyCustomRangeTag mylist x en
  • 将复选框值存储在本地存储中

    我有一个复选框 其值 row uid 我想使用 javascript 或 jquery 存储在本地存储中 当用户 取消选中 该复选框时 该值应从本地存储中删除 这是我的html
  • NSURLSession didCompleteWithError: 被调用时 NSError 为 nil

    场景是在上传过程中多次将应用程序带到后台和前台 在将应用程序带到前台时调用 didCompleteWithError 方法 错误参数为 null 概率是1 3 由于错误参数没有提供任何信息 我如何找出出了什么问题 问题是 didComple
  • 使用“A Simple Delphi Wrapper for SQLite3”插入日期

    我正在使用 delphi 2010 和 Tim Anderson 的 SQLite3 包装器 http www itwriting com blog page id 659 但我在插入日期时遇到问题 这是我的数据库创建 DB ExecSql