SQL查询命令互转vba格式

news2024/10/6 14:37:02

最近搞个Excel的vba查询数据库,发现vba有代码行长度限制需要转换下就弄了这个,布局和功能暂且这样了,哪位大佬如果有兴趣的可以再美化下!

这次更新了SQL命令互转VBA格式,
SQL原始格式要分行的不能一坨贴进去,不然转换后会出现多个连接符,能力有限不懂改了……
vba格式原始格式尽量从vba复制出来吧
我使用的2008 R2所以vba那个段仅当测试用的,如果你用其他数据库自行修改吧

import tkinter as tk
from tkinter import ttk
import re
import tkinter.messagebox as messagebox
import tkinter.scrolledtext as scrolledtext
from tkinter import Tk
 
# 定义一个函数,用于移除文本中的换行符和回车符
def remove_newlines():
    # 数据库连接信息
    server_name = server_entry.get() 
    database_name = database_entry.get() 
    username = username_entry.get() 
    password = password_entry.get()
 
    sql_command = text.get("1.0", "end-1c")
    sql_command = re.sub(r"(.{130}(?:\s|$))", r'\1 "& _\n" ', sql_command)
    sql_command = re.sub(r"\s+", " ", sql_command)
    sql_command = re.sub(r"(.{130}(?:\s|$))", r'\1 "& _\n" ', sql_command)
 
    vba_code = generate_vba_code(
        server_name, database_name, username, password, sql_command
    )
 
    sql_command_text.delete(1.0, tk.END)
    sql_command_text.insert(tk.END, sql_command)
 
    vba_code_text.delete(1.0, tk.END)
    vba_code_text.insert(tk.END, vba_code)
 
def convert_to_sql():
    vba_command = text.get(1.0, tk.END)
    vba_command = re.sub(r'"\s*&\s*_\s*"', '', vba_command)
    sql_command_text.delete(1.0, tk.END)
    sql_command_text.insert(tk.END, vba_command)
 
# 定义一个函数,用于生成VBA代码
def generate_vba_code(server_name, database_name, username, password, sql_command):
    vba_code = f'''
    Sub RunSQLQuery()
    Dim conn As Object
    Dim rs As Object
    Dim strSQL As String
    Dim xlApp As Object
    Dim xlWorkbook As Object
    Dim xlWorksheet As Object
 
    ' 数据库连接信息
    serverName = "{server_name}"
    databaseName = "{database_name}"
    userName = "{username}"
    password = "{password}"
 
    ' 获取输入框变量的值,这个可以删除
    bFullName = ""
    pFullName = ""
    pUserCode = ""
    pStandard = ""
    Number = ""
    CFDA = ""
    pArea = ""
 
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
 
    ' 建立数据库连接
    conn.Open "Provider=SQLOLEDB;Data Source=" & serverName & ";Initial Catalog=" & databaseName & ";User ID=" & userName & ";Password=" & password & ";"
 
    ' SQL查询命令
    strSQL = "{sql_command}"
 
    ' 执行查询
    rs.Open strSQL, conn
 
    ' 将查询结果输出到Excel工作表
    Dim i As Integer
    For i = 1 To rs.Fields.Count
    ActiveSheet.Cells(1, i).Value = rs.Fields(i - 1).Name
    Next i
 
    If Not rs.EOF Then
    ActiveSheet.Range("A2").CopyFromRecordset rs
    End If
 
    ' 清理资源
    rs.Close
    conn.Close
 
    Set rs = Nothing
    Set conn = Nothing
    End Sub'''
    return vba_code
 
# 定义一个函数,用于粘贴文本
def paste_text():
    try:
        text.delete('1.0', tk.END)
        text.insert(tk.END, root.clipboard_get())
    except tk.TclError:
        pass
 
# 定义一个函数,用于复制文本到剪贴板
def copy_text():
    try:
        root.clipboard_clear()
        root.clipboard_append(sql_command_text.get("1.0", tk.END))
        messagebox.showinfo('复制成功', '已将转换后的内容复制到剪贴板')
    except tk.TclError:
        pass
 
# 主程序入口
root = tk.Tk()
 
notebook = ttk.Notebook(root)
notebook.pack(fill="both", expand=True)
 
input_frame = tk.Frame(notebook)
input_frame.pack(fill="both", expand=True)
 
text_frame = tk.Frame(input_frame)
text_frame.pack(side=tk.TOP, fill="both", expand=True)
 
text = tk.Text(text_frame, height=10, width=100)
text.pack(side=tk.LEFT, fill="both", expand=True)
 
text_scrollbar = ttk.Scrollbar(
    text_frame, orient=tk.VERTICAL, command=text.yview
)
text_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
text.configure(yscrollcommand=text_scrollbar.set)
 
notebook.add(input_frame, text="输入框")
 
input_frame = tk.Frame(root) 
input_frame.pack(side=tk.TOP)
 
server_label = tk.Label(input_frame, text="服务器:") 
server_label.grid(row=0, column=0, sticky=tk.E, padx=5, pady=5)
server_entry = tk.Entry(input_frame) 
server_entry.grid(row=0, column=1, padx=5, pady=5)
 
database_label = tk.Label(input_frame, text="数据库:") 
database_label.grid(row=1, column=0, sticky=tk.E, padx=5, pady=5)
database_entry = tk.Entry(input_frame) 
database_entry.grid(row=1, column=1, padx=5, pady=5)
 
username_label = tk.Label(input_frame, text="用户名:") 
username_label.grid(row=2, column=0, sticky=tk.E, padx=5, pady=5)
username_entry = tk.Entry(input_frame) 
username_entry.grid(row=2, column=1, padx=5, pady=5)
 
password_label = tk.Label(input_frame, text="密码:") 
password_label.grid(row=3, column=0, sticky=tk.E, padx=5, pady=5)
password_entry = tk.Entry(input_frame) 
password_entry.grid(row=3, column=1, padx=5, pady=5)
 
output_frame = tk.Frame(notebook)
output_frame.pack(fill="both", expand=True)
 
sql_command_text = scrolledtext.ScrolledText(output_frame, height=10, width=100)
sql_command_text.pack(fill="both", expand=True)
 
vba_code_text = scrolledtext.ScrolledText(output_frame, height=10, width=100)
vba_code_text.pack(fill="both", expand=True)
 
notebook.add(output_frame, text="输出框")
 
button_frame = tk.Frame(root)
button_frame.pack(side=tk.TOP)
 
paste_button = tk.Button(button_frame, text="清空粘贴", command=paste_text)
paste_button.pack(side=tk.LEFT, padx=10)
 
button = tk.Button(button_frame, text="转换VBA格式", command=remove_newlines)
button.pack(side=tk.LEFT, padx=10)
 
button = tk.Button(button_frame, text="转换SQL格式", command=convert_to_sql)
button.pack(side=tk.LEFT, padx=10)
 
copy_button = tk.Button(button_frame, text="复制结果", command=copy_text)
copy_button.pack(side=tk.LEFT, padx=10)
 
root.mainloop()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1116320.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java日志系统之JUL

目录 JUL介绍 JUL的使用 日志级别 指定日志输出地址 Logger对象的父子关系 Logger读取配置文件 JUL介绍 Java自带的框架,使用简单,无需引入依赖 JUL的使用 public class JULTest {Testpublic void testLogger() throws Exception{//获取日志记录…

2 用TensorFlow构建一个简单的神经网络

上一篇:1 如何入门TensorFlow-CSDN博客 环境搭建 后续介绍的相关代码都是在pycharm运行,pycharm安装略。 打开pycharm,创建一个新的项目用于tensorflow编码练习,在Terminal输入命令: # 依赖最新版本的pip pip inst…

[AutoSAR系列] 1.2 AutoSar 综述

AutoSAR是一种汽车工业领域的标准化软件架构,旨在简化不同汽车制造商之间的软件开发和交互。该标准于2003年由一系列欧洲汽车制造商成立的AutoSAR联盟制定并发布,目前已经成为全球范围内的标准。下面将对AutoSAR的概念、架构和实现进行综述。 1. 概述 AutoSAR是汽车电子控制…

Qt 读写文件(QFileQTextStreamQDataStream) 详解

一、读写文本文件 (QFile 类) Qt QFile类是一个用于读取和写入文件的类,它提供了对文件的访问、读取和写入等操作。它既可以操作文本文件,也可以操作二进制文件。 QFile类的功能包括: 打开、关闭文件读取文件内容写入文件内容支持文本模式…

如何让ChatGPT生成图片?

目录 一、那么如何解决让ChatGPT具有画图能力的问题呢? 二、那ChatGPT为什么能生成图片呢? 我们都知道ChatGPT只是个纯文本的AI模型,不具备画图能力。它可以生成文本,但如果让他生成图片就会显示如下的声明: 但通过本…

前端多媒体处理工具——ffmpeg的使用

写在前面 在前端领域,FFmpeg 是一个非常有用的工具,它提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率切换等。可以在多种操作系统安装使用。 安装 下载FFmpeg 在网…

服务器数据恢复-某银行服务器硬盘数据恢复案例

服务器故障&分析: 某银行的某一业务模块崩溃,无法正常使用。排查服务器故障,发现运行该业务模块的服务器中多块硬盘离线,导致上层应用崩溃。 故障服务器内多块硬盘掉线,硬盘掉线数量超过服务器raid阵列冗余级别所允…

文件目录(文件控制块FCB,目录结构,索引结点)

1.文件控制块(实现文件目录的关键数据结构) 目录文件中的一条记录就是文件控制块(FCB) FCB的有序集合称为“文件目录”,一个FCB就是一个文件目录项。 1.FCB的组成 FCB中包含了文件的基本信息(文件名、物理地址、逻…

墨迹天气商业版UTF-8模板,Discuz3.4灰白色风格(带教程)

1.版本支持:Discuzx3.4版本,Discuzx3.3版本,DiscuzX3.2版本。包括网站首页,论坛首页,论坛列表页,论坛内容页,论坛瀑布流,资讯列表页(支持多个),产品列表页(支持多个),关于…

【TES600】青翼科技基于XC7K325T与TMS320C6678的通用信号处理平台

板卡概述 TES600是一款基于FPGA+DSP协同处理架构的通用高性能实时信号处理平台,该平台采用1片TI的KeyStone系列多核浮点/定点DSP TMS320C6678作为主处理单元,采用1片Xilinx的Kintex-7系列FPGA XC7K325T作为协处理单元,具有1个FMC…

Android Studio(2022.3.1)设置阿里云源-新旧版本

新版本 #settings.gradle.ktsmaven { url uri("https://maven.aliyun.com/repository/public/") }maven { url uri("https://maven.aliyun.com/repository/google/") }maven { url uri("https://maven.aliyun.com/repository/jcenter/") }ma…

VBA操作数据库

相关背景: 对于数据分析同学,一般SQL,EXCEL是必备技能,但对于VBA和Python可能有的同学不会;在处理本地数据上(诸如excel、txt|csv文本),后续尝试使用VBA或者Python写一个sql查询的GUI界面&…

dubbogo-1 基础rpc服务

文章目录 基本环境处理编译pb接口开启rpc调用业务观察qa1 能取出protoc里面的字段值吗? 基本环境处理 https://cn.dubbo.apache.org/zh-cn/overview/quickstart/go/install/ 这里没有 protoc-gen-go --version 执行 go get -u github.com/golang/protobuf/protoc…

嵌入式养成计划-45----QT--事件机制--定时器事件--键盘事件和鼠标事件--绘制事件

一百一十五、事件机制 当这件事情发生时,会自动走对应的函数处理(重写的事件函数) 115.1 事件处理简介 什么是事件? (重点) 件是由窗口系统或者自身产生的,用以响应所发生的各类事情,比如用户按下并释放…

vscode调试技巧 断言 assert

目录 调试技巧标题debug release介绍调试技巧断点 断点的意思 就是代码执行到断点处停下来,让你去调试。不管前面有多少代码,直接跳到断点处(当然前面的已经执行)逐过程 不会进入调用函数内部,不管里面怎么执行。 逐语…

精讲stable diffusion的controlNet插件

controlNet插件是stable diffusion的一个重要插件,甚至可以说正是因为有了controlNet插件,stable diffusion才会具有midjourney所不具备的独特魅力! 我们今天就一起来学习下controlNet插件的安装和每个模型的用法 插件主页 独立的controlN…

MSP430F5529时钟系统配置

1、为什么要进行时钟管理?   时钟系统是一个数字器件的命脉,对于普通的51单片机来说,它的时钟来源只有外部晶振,然后每12个振荡周期完成一个基本操作,所以也叫做12T单片机,但对于当前高级一点的单片机来…

牛客:NC59 矩阵的最小路径和

牛客:NC59 矩阵的最小路径和 文章目录 牛客:NC59 矩阵的最小路径和题目描述题解思路题解代码 题目描述 题解思路 动态规划,递推公式:matrix[i][j] min(matrix[i-1][j], matrix[i][j-1]) 题解代码 func minPathSum( matrix [][…

性能压测工具 —— wrk

一般我们压测的时候,需要了解衡量系统性能的一些参数指标,比如。 1、性能指标简介 1.1 延迟 简单易懂。green:一般指响应时间 95线:P95。平均100%的请求中95%已经响应的时间 99线:P99。平均100%的请求中99%已经响应的时间 平…

maven聚合和继承

一、什么是maven的聚合和继承&why 随着技术飞速发展,各类用户对软件的要求越来越高,软件也变得越来越复杂。 软件设计人员往往会采用各种方式对软件划分模块,已得到更加清晰的设计及更高的复用性。 当把Maven应用到实际项目中的时候&am…