直接用sql处理就行了
if exists (select from dbosysobjects where id = object_id(N'[dbo][p_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo][p_exporttb]
GO
create proc p_exporttb
@sqlstr varchar(8000), --查询语句,如果查询语句中使用了order by ,请加上top 100 percent
@path nvarchar(1000), --文件存放目录
@fname nvarchar(250), --文件名
@sheetname varchar(250)='' --要创建的工作表名,默认为文件名
as
declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)
--参数检测
if isnull(@fname,'')='' set @fname='tempxls'
if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'','#')
--检查文件是否已经存在
if right(@path,1)<>'\' set @path=@path+'\'
create table #tb(a bit,b bit,c bit)
set @sql=@path+@fname
insert into #tb exec masterxp_fileexist @sql
--数据库创建语句
set @sql=@path+@fname
if exists(select 1 from #tb where a=1)
set @constr='DRIVER={Microsoft Excel Driver (xls)};DSN='''';READONLY=FALSE'
+';CREATE_DB="'+@sql+'";DBQ='+@sql
else
set @constr='Provider=MicrosoftJetOLEDB40;Extended Properties="Excel 80;HDR=YES'
+';DATABASE='+@sql+'"'
--连接数据库
exec @err=sp_oacreate 'adodbconnection',@obj out
if @err<>0 goto lberr
exec @err=sp_oamethod @obj,'open',null,@constr
if @err<>0 goto lberr
--创建表的SQL
declare @tbname sysname
set @tbname='##tmp_'+convert(varchar(38),newid())
set @sql='select into ['+@tbname+'] from('+@sqlstr+') a'
exec(@sql)
在 SQL 中,可以使用转义字符 '' 来输出特殊字符,包括 '\n' 和 '\t' 等。例如,要在控制台中输出字符串 "Hello\nWorld",可以使用以下 SQL 语句:
sqlCopy codeSELECT 'Hello\nWorld';
在这个示例中,使用单引号 ' ' 包含字符串 "Hello\nWorld",并使用转义字符 '' 来表示换行符 '\n'。当执行这个 SQL 语句时,会在控制台中输出字符串 "Hello" 和 "World" 之间带有换行符的文本。
类似地,要在控制台中输出字符串 "Hello\sWorld",可以使用以下 SQL 语句:
sqlCopy codeSELECT 'Hello\\sWorld';
在这个示例中,同样使用单引号 ' ' 包含字符串 "Hello\sWorld",并使用两个连续的反斜杠 '\' 来表示转义字符 ''。当执行这个 SQL 语句时,会在控制台中输出字符串 "Hello\sWorld"。
需要注意的是,不同的数据库可能对转义字符的支持和处理方式略有不同,在实际开发中需要根据具体的数据库和环境进行调整和测试。
我说得可能会烦琐一点,只是怕说得不够明白,但 *** 作起来其实会很简单,在第一次把格式设定好后,每个月就没什么工作了
假设你的工资表数据库在sheet1,另加两个空表sheet2和sheet3
假设sheet1的表头在第1行,数据从A列到P列,在sheet2的A1单元格输入公式:“=sheet1!A1”,然后向右拖动公式至P1,然后复印第一行,粘贴到第二行。这时,sheet2的第1行和第2行就把sheet1的表头和第一行数据引用过来了。
在sheet2的第3行A3里输入公式:“=A$1”,然后向右拖动公式至P3(这里千万要注意在1前面加“$”)
选择A2:P3,把鼠标放在右下角出现黑色十字的时候往下拉(这个 *** 作就是把公式往下拉),有没有出现让你惊喜的东西?但是别高兴太早,仔细看看你会发现这里只是引用了行号为双数的数据。因为比如在第2行的单元格A2的公式是:“=sheet1!A2”,当把公式下拉的时候,第3行放的是表头,而第4行的公式就会变成:“=sheet1!A4”,而sheet1里的第3行的数据没有被引用,因此你还要做sheet3,步骤是一样的,只是把第二行的公式改动一下,比如在A2里输入公式:“sheet1!A3
”这里就会把sheet1里行号是单数的数据引用过来了
大功告成!看看能不能解决你的问题?
你需通过VB的打包程序,生成一个安装包,将此安装程序将你的应用程序安装于WIN2000机器,它同时会将所涉及的OCX文件安装于系统你的第一个问题是WIN2000系统缺少MSDATGRDOCX文件或未注册
第二问题楼上已作回答
第三问题数据打印输出:
VB下数据报表打印输出方法有多种,一是通过自己的设计和编程完成报表打印输出。二是通过MS OFFICE实现报表打印输出。三是应用数据报表设计器的报表打印输出。本人经常使用第一种方法,它具有根据需要灵活应用的特点,但需编写程序。下附代码,第一段代码定义基本变量,第二段代码定义打印函数,第三段代码是具体打印代码,含数据转换。第四段代码是窗体加载代码,具体连接数据库和打印代码根据你所涉及的数据要求进行修改。
Option Explicit
Private n As Integer
Private m As Integer
Private zh_dm(10) As Double
Private dy_dm(3000, 10) As Variant
Private zsl As Integer
Private y As Integer
Private x As Integer
Private i As Integer
Private k As Integer
Private p As Integer
Private pa As Integer
Private j As Integer
Private txt As String
Private fnt As Integer
Private dd As Variant
Public Function prnt(x As Variant, y As Variant, fnt As Variant, txt0 As Variant)
PrinterCurrentX = x
PrinterCurrentY = y
PrinterFontSize = fnt
PrinterPrint txt0
End Function
Private Sub cmdPrint_Click()
Adodc1RecordsetMoveFirst
For i = 0 To zsl - 1
For j = 0 To 7
dy_dm(i, j) = Adodc1Recordset(j)
Next j
Adodc1RecordsetMoveNext
Next i
'确定页数
k = Int(zsl / 80)'80为每页行数
If k - zsl / 80 < 0 Then
k = k + 1
End If
fnt = 8
For p = 0 To k - 1
pa = p + 1
y = 300
x = 4500
txt = "机物料库存"
dd = prnt(x, y, fnt, txt)
x = 8500
txt = "第" & p + 1 & "页"
dd = prnt(x, y, fnt, txt)
y = 500
x = 600
txt = "备件代码"
dd = prnt(x, y, fnt, txt)
x = 1500
txt = "备件名称"
dd = prnt(x, y, fnt, txt)
x = 3500
txt = "备件规格"
dd = prnt(x, y, fnt, txt)
x = 5500
txt = "进口计算机号"
dd = prnt(x, y, fnt, txt)
x = 7500
txt = "最低储备量"
dd = prnt(x, y, fnt, txt)
x = 9000
txt = "库存量"
dd = prnt(x, y, fnt, txt)
For i = 0 + p 80 To 79 + p 80
y = 700 + 180 (i - p 80)
x = 600
txt = dy_dm(i, 1)
dd = prnt(x, y, fnt, txt)
x = 1500
txt = dy_dm(i, 2)
dd = prnt(x, y, fnt, txt)
x = 3500
txt = dy_dm(i, 3)
dd = prnt(x, y, fnt, txt)
x = 5500
txt = dy_dm(i, 4)
dd = prnt(x, y, fnt, txt)
x = 7500
txt = dy_dm(i, 5)
dd = prnt(x, y, fnt, txt)
x = 9000
txt = dy_dm(i, 6)
dd = prnt(x, y, fnt, txt)
If Int(i / 10) - i / 10 = 0 Then
PrinterLine (500, 695 + (i - p 80) 180)-(10000, 695 + (i - p 80) 180)
End If
Next i
If zsl - p 80 > 80 Then
PrinterLine (500, 695 + 180 80)-(10000, 695 + 180 80)
PrinterNewPage
End If
Next p
PrinterEndDoc ' 打印完成。
Cls
End Sub
Private Sub Form_Load()
Adodc1ConnectionString = "Provider=MSDASQL1;Persist Security Info=False;Data Source=jwl_dbf"
Adodc1RecordSource = "select csjs_dm,cs备件代码,cs备件名称,cs备件规格,cs进口计算机号,cs最低库存量,sl结存数量,sl结存金额,sl结存单价,sl类别代码 from JWCK_BM as cs,jwl_jiec as sl" & _
" where cs备件代码 = sl备件代码" & " and cs备件代码>" & "''" & " order by sl类别代码,sl备件代码"
Adodc1Refresh
DataGrid1Refresh
zsl = Adodc1RecordsetRecordCount
Adodc3ConnectionString = "Provider=MSDASQL1;Persist Security Info=False;Data Source=jwl_dbf"
Adodc3RecordSource = "select sum(结存金额) as hj from jwl_jiec"
Adodc3Refresh
End Sub
条码软件支持多种数据库类型,你可以根据自己的需求导入所需的数据库,然后调用即可批量打印标签,这里以导入TXT文本为例,步骤如下:
现在印刷行业中,批量生成可变内容已经是众多厂家都在使用的一种方法,一般来说可变效果都是使用数据库导入的方式实现的,那么对于很多刚刚接触软件的客户可能对于数据库不太了解,其实如果您使用的是条码软件,可以直接将您的Excel或者TXT作为数据库导入软件就可以直接实现可变效果了, *** 作也是非常简单,下面我们就可以详细看一下其 *** 作步骤:
首先,我们可以先将数据保存在TXT中,TXT中内容需要时每项内容竖向排列,每项内容之间可以用逗号分隔也可以空格等:
下面我们开始将TXT数据导入中琅软件看下详细 *** 作方法:
1、打开条码软件,先根据提示设置和打印机中纸张相符的纸张及布局参数。
2、点击上方工具栏中的数据库设置图标,然后点击“添加-TXT文本数据源(文件)”,在d出窗口中点击“浏览”选择需要导入的文件,然后点击“测试连接”核对数据是否正确:
从上图记录总数和样本数据中可以看到,记录总数是正确的,但是样本数据不对,两个数据没有分隔开,这时可以点击上方“分隔符号”位置,由于我们的数据是空格分开的,分隔符中可以选择自定义,然后在后面输入框中,输入个空格“ ”,再次点击测试连接,核对样本数据正确后,点击“添加-关闭”即可。
3、添加标签内容内容:
固定内容:条码软件中固定内容可使用手动输入的方法添加,在画布上添加内容时可先点击左侧工具栏中“A”图标,然后在画布上绘制普通文本,并双击普通文本,在“图形属性-数据源”下方点击左侧修改,选择手动输入,然后输入文字内容,并点击编辑即可。
可变内容:添加方法与添加固定内容类似,在数据源中点击修改,选择数据库导入,然后在选择对应字段列内容导入,然后再点击“编辑-确定”即可。-
第二个可变内容可用相同方法添加,添加后,即可点击打印预览,查看所有数据生成的可变数据标签内容。
以上就是关于如何将DataGrid中显示的数据库数据打印出来全部的内容,包括:如何将DataGrid中显示的数据库数据打印出来、数据库中如何在控制台打印字符串\n\s、如何将EXCEL工资表数据库打印成带有表头的工资条等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)