【发布时间】:2019-03-29 17:40:17
【问题描述】:
我们必须重建一个应用程序,从各种数据库导入数据并将它们插入我们的数据库,在 Firebird 3 中(使用 node-firebird)。
在 NodeJS 项目中运行时,使用 Express 运行良好。
现在,我正在编写 POC 以将代码嵌入到 Electron 应用程序中。
每当我尝试执行 SELECT 以外的任何操作时,应用程序都会崩溃。
这是消息:
Error
at doCallback (index.js:1234)
at index.js:2929
at messages.js:126
at FSReqWrap.oncomplete (fs.js:141)
我没有任何其他消息。
我们使用的是 Electron 4.0.5、Node 10、Firebird 3.0.4(32 位) 节点火鸟
我们也尝试过:node-firebird-dev 但没有成功
这是一个简单的代码示例(使用“manukdadali”,node-firebird 上的异步包装器)。
const firebird = require('manukdadali');
const path = require('path');
const moment = require('moment');
class TestDB {
constructor(folder) {
this.options = {
host: 'localhost',
database: path.resolve(folder),
user: 'SYSDBA',
password: 'masterkey',
};
}
insertData = async () => {
const db = await firebird.connect(this.options);
let rows = await db.query('select * from t_client');
console.log(rows);
try {
rows = await db.query(
`insert into t_client
(t_client_id,
matricule,
nom,
prenom,
nom_jeune_fille,
date_naissance,
rang_gemellaire,
langue,
sexe,
maison,
etage,
chambre,
lit,
commentaire_individuel,
commentaire_global,
t_profil_remise_id,
t_personne_referente_id,
facturation,
date_derniere_visite
) values (
4,
'000233532',
'NAME',
'NAME2',
'NAME3',
'19700504',
1,
'FR',
'M',
'',
'',
'',
'',
'',
'',
1,
1,
'1',
''
)`);
} catch (error) {
console.log(error);
}
};
}
export { TestDB };
【问题讨论】:
-
在 ISQL(或其他查询工具)中尝试插入时插入是否正确执行,例如,我发现您将空字符串插入名为
date_derniere_visite的列中很可疑,这表明它是TIMESTAMP或DATE列,其中空字符串不是有效值。另外,插入不会产生行,分配给rows在这里很奇怪,但我不确定这是否会导致错误。 -
嗨,马克。谢谢你的回答。是的,我可以在 ISQL 中插入、更新、执行存储过程。问题只在 Electron 内部。一个简单的 Nodejs 脚本中的相同操作可以正常工作。
-
rows = await db.query- 但行集仅由 SELECT 查询类型生成。为什么你会期望任何其他查询产生行集??? -
确实如此。但这不是重点。它应该返回“0”,但不会崩溃。
-
当它不应该返回任何东西时为什么要“返回0”?
标签: node.js async-await electron firebird async.js