2019年6月8日 星期六

[Nodejs] node-adodb 使用Electron建置執行檔錯誤

在使用Electron + node-adodb時,在local端運作正常,但編譯過後會執行時出現錯誤提示:
Spawn C:\Windows\SysWOW64\cscript.exe error

此程式是透過調用Windows下內建cscript.exe來進行解析mdb檔案,而調用的過程中所給的參數如下:

const args = [Proxy.adodb, '//E:JScript', '//Nologo', '//U', '//B', command];

其中 Proxy.adodb = require.resolve('./adodb')

這個路徑是造成此error最主要的原因,在調用cscript.exe時,要傳遞js腳本作為參數,而compile後的 adodb.js 這個檔案,被封裝於asar內部,無法讓外部程式cscript.exe取得內容。我的解決方法是程式內部讀取adodb.js文件,再進行轉存一份script.js到公開目錄下,供外部程式讀取。

fork了一份專案進行修改: https://github.com/lclee3390/node-adodb

npm install:
npm install --save https://github.com/lclee3390/node-adodb.git

[Nodejs] Electron建立可執行檔


一、Electron


可使用html作為GUI介面的設計,進行配置後也可支援Angular、React、Vue相應的環境,再透過electron packager 可以打包成exe,或者,使用electron builder建置安裝檔。

若是使用Angular,可直接clone angular-electron這個倉庫,裡面已將各版本的環境都建置模板了。

又或者,想要建置一個非常基礎的應用程式,clone 官方的quick start來進行修改會快速很多,但此專案並不包含electron packager,需另外進行配置。


二、Electron Packager


npm install electron-packager --save-dev

  • 在package.json中的script加入指令

"build" :  "electron-packager ./ appname --out ./dist --overwrite"


三、Electron Builder


npm install electron-builder --save-dev



  • 配置package.json


"build": {
    "appId": "com.xxx.app",
    "mac": {
      "target": ["dmg","zip"]
    },
    "win": {
      "target": ["nsis","zip"]
    }
},
"scripts": {
     "builder": "electron-builder --win --x64"
}


2019年6月7日 星期五

[Nodejs] node-adodb 讀取.mdb檔案

  • https://www.npmjs.org/package/node-adodb
  • Simple Query:

const ADODB = require('node-adodb');
const connection = ADODB.open('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=node-adodb.mdb;');

connection
  .query('SELECT * FROM TABLE_NAME') // query method return Promise
  .then(data => {
    console.log(JSON.stringify(data, null, 2));
  })
  .catch(error => {
    console.error(error);
  });

  • 依據Access版本不同,在ADODB.open時指定不同的連接字串
    • Access 2000-2003 (*.mdb): 
      • Provider=Microsoft.Jet.OLEDB.4.0;Data Source=node-adodb.mdb;
    • Access > 2007 (*.accdb): 
      • Provider=Microsoft.ACE.OLEDB.12.0;Data Source=adodb.accdb;Persist Security Info=False; 
      • Provider=Microsoft.ACE.OLEDB.15.0;Data Source=adodb.accdb;Persist Security Info=False;