You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ODBC连接后Electron崩溃问题求助

问题描述

通过ODBC连接成功获取数据后,首次切换至其他页面再返回刷新数据时出现错误,错误信息及相关代码如下:

数据获取代码

window.$ = window.jQuery = require("jquery");
const odbc = require("odbc");

async function queryOData() {
  const connection = await odbc.connect(
    `DSN=odbc605;Description=odbc605;UID=odbc605;;APP=Microsoft Office 2013;WSID=ZB585;DATABASE=605;LANGUAGE=Nederlands;StatsLog_On=Yes;StatsLogFile=C:\Users\FLORS\Desktop\STATS.LOG;`
  );
  const data = await connection.query(
    "SELECT TOP 100 DT_ItemsTabel.ItemCode, DT_ItemsTabel.Description FROM DT_ItemsTabel"
  );
  alert(data);
}

queryOData();

错误信息

[17028:0310/140004.528:ERROR:crashpad_client_win.cc(844)] not connected
[11116:0310/140122.300:ERROR:gpu_init.cc(523)] Passthrough is not supported, GL is disabled, ANGLE is

Electron主进程代码(index.js)

const { app, BrowserWindow } = require("electron");
const path = require("path");
const fs = require("fs");

// Handle creating/removing shortcuts on Windows when installing/uninstalling.
if (require("electron-squirrel-startup")) {
  app.quit();
}

const createWindow = () => {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    //width: 800,
    //height: 500,
    icon: __dirname + "/assets/ZB-icon.ico",
    webPreferences: {
      //preload: path.join(__dirname, 'preload.js'),
      contextIsolation: false,
      nodeIntegration: true,
      devTools: true,
      webSecurity: false,
      backgroundThrottling: false,
    },
    autoHideMenuBar: false,
    backgroundColor: "#f3f3f3",
  });
};

解决方案

  • 规范ODBC连接的生命周期
    每次刷新重复创建连接容易引发资源冲突,建议使用后主动关闭连接,同时修正连接字符串里的路径转义问题:

    async function queryOData() {
      let connection;
      try {
        // 路径反斜杠要转义,否则会被当作特殊字符处理
        connection = await odbc.connect(
          `DSN=odbc605;Description=odbc605;UID=odbc605;;APP=Microsoft Office 2013;WSID=ZB585;DATABASE=605;LANGUAGE=Nederlands;StatsLog_On=Yes;StatsLogFile=C:\\Users\\FLORS\\Desktop\\STATS.LOG;`
        );
        const data = await connection.query(
          "SELECT TOP 100 DT_ItemsTabel.ItemCode, DT_ItemsTabel.Description FROM DT_ItemsTabel"
        );
        alert(data);
      } catch (err) {
        console.error("查询出错:", err);
      } finally {
        // 无论成功失败,都关闭连接释放资源
        if (connection) await connection.close();
      }
    }
    
  • 补全Electron窗口初始化逻辑
    当前代码只创建了窗口但未加载页面,也没有处理应用生命周期事件,导致窗口无法正常工作,补充如下:

    const createWindow = () => {
      const mainWindow = new BrowserWindow({
        icon: __dirname + "/assets/ZB-icon.ico",
        webPreferences: {
          contextIsolation: false,
          nodeIntegration: true,
          devTools: true,
          webSecurity: false,
          backgroundThrottling: false,
        },
        autoHideMenuBar: false,
        backgroundColor: "#f3f3f3",
      });
      // 加载你的业务页面,假设是同目录下的index.html
      mainWindow.loadFile(path.join(__dirname, "index.html"));
    };
    
    // 应用就绪时创建窗口
    app.whenReady().then(() => {
      createWindow();
      // macOS下点击dock图标重新创建窗口
      app.on("activate", () => {
        if (BrowserWindow.getAllWindows().length === 0) createWindow();
      });
    });
    
    // 所有窗口关闭时退出应用(macOS除外)
    app.on("window-all-closed", () => {
      if (process.platform !== "darwin") app.quit();
    });
    
  • 解决GPU兼容错误
    gpu_init.cc的错误是Windows上Electron常见的GPU兼容问题,禁用硬件加速即可解决:
    在BrowserWindow的webPreferences里添加配置:

    webPreferences: {
      // 原有配置不变
      hardwareAcceleration: false,
    }
    

    或者在app启动前全局禁用:

    app.disableHardwareAcceleration();
    

内容的提问来源于stack exchange,提问作者DeskDoc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 20:04:59