我想生成从MS-Access数据库检索并存储在DataTable对象/变量myDataTable中的一些格式化数据输出.但是,myDataTable中的一些字段包含dbNull数据.因此,如果任何字段lastname,intials或sID的值为dbNull,则以下VB.net代码段将给出错误.
dim myDataTable as DataTable
dim tmpStr as String
dim sID as Integer = 1
...
myDataTable = myTableAdapter.GetData() ' Reads the data from MS-Access table
...
For Each myItem As DataRow In myDataTable.Rows
tmpStr = nameItem("lastname") + " " + nameItem("initials")
If myItem("sID")=sID Then
' Do something
End If
' print tmpStr
Next
Run Code Online (Sandbox Code Playgroud)
所以,我如何得到上面的代码工作时字段可能包含的DBNull,而不必每次数据是否为DBNull在时间来检查这个问题?
我有一个带有两个项目的Visual Studio 2008解决方案(一个Word-Template项目和一个用于测试的VB.Net控制台应用程序).这两个项目都引用一个数据库项目,该项目打开与MS-Access 2007数据库文件的连接,并引用System.Data.OleDb.在数据库项目中,我有一个函数,它按如下方式检索数据表
private class AdminDatabase
' stores the connection string which is set in the New() method
dim strAdminConnection as string
public sub New()
...
adminName = dlgopen.FileName
conAdminDB = New OleDbConnection
conAdminDB.ConnectionString = "Data Source='" + adminName + "';" + _
"Provider=Microsoft.ACE.OLEDB.12.0"
' store the connection string in strAdminConnection
strAdminConnection = conAdminDB.ConnectionString.ToString()
My.Settings.SetUserOverride("AdminConnectionString", strAdminConnection)
...
End Sub
' retrieves data from the database
Public Function getDataTable(ByVal sqlStatement As String) As DataTable
Dim ds As New DataSet
Dim …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个小应用程序来收集从连接到COM10的外部传感器接收的数据.我已成功创建了一个小型C#控制台对象和应用程序,它使用for循环打开端口并将数据流传输到文件一段固定的时间.
我想转换此应用程序以使用dataReceived事件来代替流.阅读前5个SerialPort提示后,我似乎仍然无法工作,也不知道我缺少什么.我重写了控制台应用程序,以便所有代码都在Main中并粘贴在下面.有人可以帮助启发我,为什么事件处理程序port_OnReceiveDatazz没有被调用,即使我知道硬件有数据被发送到端口?
谢谢
阿齐姆
PS:感谢@Gabe,@ Jason Down和@abatishchev的所有建议.我很难过,似乎无法让事件处理程序工作.也许它与设备有关.我只能在线程中读取端口并将数据直接传输到文件中.
码
namespace serialPortCollection
{ class Program
{
static void Main(string[] args)
{
const int bufSize = 2048;
Byte[] buf = new Byte[bufSize]; //To store the received data.
SerialPort sp = new SerialPort("COM10", 115200);
sp.DataReceived += port_OnReceiveDatazz; // Add DataReceived Event Handler
sp.Open();
sp.WriteLine("$"); //Command to start Data Stream
// Wait for data or user input to continue.
Console.ReadLine();
sp.WriteLine("!"); //Stop Data Stream Command
sp.Close();
} …Run Code Online (Sandbox Code Playgroud) 在我的数据库中,我有表定义类型的表
表:出版物类型
ID | Type ---------- 1 | Article 2 | Abstract 3 | Book ....
通过ID键将其与具有字段TypeID的发布表相关联.
然后我创建一个PublicationTable数据表我的.NET应用程序,我想根据发布类型进行筛选.例如,以下函数为我提供了特定作者和出版物类型的出版物数量.
Public Function countPublications(ByVal authorID As Integer, _
ByVal publicationType As Integer) As Integer
Dim authPubs As New PublicationsDataSet.tblPublicationsDataTable
authPubs = Me.getAuthorsPublications(authorID)
Dim dv As New DataView(authPubs)
dv.RowFilter = "status='published' AND type='" + _
publicationType.ToString + "'"
Return dv.Count
End Function
要调用此函数来获取特定类型作者的文章计数,我可以
用两个整数调用函数
countPublications(authorID,1)
设置枚举,以便我可以写
countPublications(authorID,pubType.Article)
要么
以某种方式使用发布类型表来过滤发布数据集,但我还没有理解如何做到这一点.
我应该考虑哪些其他方法.
谢谢
下面的代码片段更改了单元格的数据验证状态,并在Excel-2003工作表不受保护时运行.但是,当我保护工作表时,宏不会运行并引发运行时错误
运行时错误'-2147417848(80010108)':
对象'验证'的方法'添加'失败
我试过包装代码
Me.unprotect
...
Me.protect
Run Code Online (Sandbox Code Playgroud)
但这不能正常工作.那么,当工作表受到保护而没有上述运行时错误时,如何修改下面的代码才能工作(即让代码修改解锁单元格的验证)?
更新
我的原始工作簿是Excel 2003.我在Excel 2007中测试了@ eJames解决方案,其中包含Workbook_Open的以下定义
Sub WorkBook_Open()
Me.Worksheets("MainTable").Protect contents:=True, userinterfaceonly:=True
End Sub
Run Code Online (Sandbox Code Playgroud)
当工作表受到保护时,代码仍会失败并出现以下运行时错误
运行时错误'1004':应用程序定义的错误或对象定义的错误
谢谢,阿齐姆
代码片段
'cell to add drop down validation list'
dim myNamedRange as String
dim modifyCell as Range
modifyCell = ActiveCell.Offset(0,1)
' set list values based on some conditions not defined for brevitity'
If myCondition then
myNamedRange = "range1"
Else
myNamedRange = "range2"
End If
With modifyCell.Validation
.Delete
'Run time error occurs on the next line'
.Add Type:=xlValidateList, …Run Code Online (Sandbox Code Playgroud) 除了Kitware提供的书籍之外,我正在寻找一些可以帮助学习VTK库的资源的链接.优选地,使用示例代码和教程.谷歌的结果对我来说并不是非常有用.所以我在这里要求获得VTK资源的链接.
我有一个小的python VTK函数,可以计算嵌入在一堆TIFF图像中的对象的体积和表面积.要阅读TIFF's到VTK,我已经使用vtkTIFFReader并使用处理结果vtkImageThreshold.然后我用它vtkMassProperties来提取阈值处理后识别的物体的体积和表面积.
使用VTK-5.04此函数返回测试堆栈的正确值(3902像素).但是,使用VTK-5.4.2相同的函数会返回不同的值(422像素).有人可以解释一下吗?
def testvtk():
# read 36 TIFF images. Each TIFF is 27x27 pixels
v16=vtk.vtkTIFFReader()
v16.SetFilePrefix("d:/test/slice")
v16.SetDataExtent(0,27,0,27,1,36)
v16.SetFilePattern("%s%04d.tif")
v16.SetDataSpacing (1,1,1)
v16.Update()
# Threshold level for seperating background/foreground pixels
maxthres=81
# Threshold the image stack
thres=vtk.vtkImageThreshold()
thres.SetInputConnection(v16.GetOutputPort())
thres.ThresholdByLower(0)
thres.ThresholdByUpper(maxthres)
# create ISO surface from thresholded images
iso=vtk.vtkImageMarchingCubes()
iso.SetInputConnection(thres.GetOutputPort())
# Have VTK calculate the Mass (volume) and surface area
Mass = vtk.vtkMassProperties()
Mass.SetInputConnection(iso.GetOutputPort()) …Run Code Online (Sandbox Code Playgroud) 我试图从存储列表中创建一个Python字典.第一种方法有效
>>> myList = []
>>> myList.append('Prop1')
>>> myList.append('Prop2')
>>> myDict = dict([myList])
Run Code Online (Sandbox Code Playgroud)
但是,以下方法不起作用
>>> myList2 = ['Prop1','Prop2','Prop3','Prop4']
>>> myDict2 = dict([myList2])
ValueError: dictionary update sequence element #0 has length 3; 2 is required
Run Code Online (Sandbox Code Playgroud)
所以我想知道为什么使用append的第一个方法有效但第二个方法不起作用?有没有之间的差异myList和myList2?
再次检查myList2实际上有两个以上的元素.更新了第二个示例来反映这一点
我想手动设置我的colorbar's刻度标签及其位置水平.例如:
Min=0.8;
Max=12;
h = colorbar('horiz');
set(h,'location','southoutside')
set(h,'XTickLabel',{num2str(Min),'mm' ,num2str(Max)})
Run Code Online (Sandbox Code Playgroud)
但是,上面的代码重复了tick标签.如何手动设置滴答数?我想让我colorbar看起来像下面这样:
****----------------**** //colorbar
min [mm] max
Run Code Online (Sandbox Code Playgroud) 我完全不知道我的队列是如何运作的.我正在尝试(并且失败)编写一个小型多线程应用程序来收集和显示C#中的数据.
在阅读了Albahari的书并使用消费者/生产者模式后,他描述了我的大部分工作都可以工作,除了我的数据似乎在队列中被扰乱.在排队之前,对象中的字段具有以下值
timeStamp = 6
data [] = {4936,9845,24125,44861}
在出列数据后,数据看起来像
timeStamp = 6
data [] = {64791,19466,47772,65405}
我不明白为什么数据字段中的值在出列后会被更改?我很困惑,所以我想我会把它扔出去,看看是否有人可以指出我正确的方向来解决这个问题,或者指出我朝着不同的方向前进.
相关守则
自定义对象用于数据存储
相关对象和字段.类sensorData是用于存储我的计算的单独类.
public class sensorData
{
public const int bufSize = 4;
public UInt16[] data = new UInt16[4];
public double TimeStamp = 0;
public int timeIndex = 0;
}
Run Code Online (Sandbox Code Playgroud)
以下字段用于设置队列并在enqueue和dequeue线程之间发出信号.
EventWaitHandle wh = new AutoResetEvent(false);
Queue<sensorData> dataQ = new Queue<sensorData>();
object locker = new object();
Run Code Online (Sandbox Code Playgroud)
入队方法/线程
这是我的工作线程,它计算四条正弦曲线并将结果排队等待处理.我还将结果写入文件,因此我知道它的计算结果.
private void calculateAndEnqueueData(BackgroundWorker worker, DoWorkEventArgs e)
{
int j = 0;
double …Run Code Online (Sandbox Code Playgroud) 我使用源代码中的Python绑定成功构建并安装了VTK-5.4.然而,当我尝试在python中导入VTK时,它会产生以下Traceback错误
文件"",第1行,in
文件"/usr/local/lib/python2.6/dist-packages/VTK-5.4.2-py2.6.egg/vtk/ init .py",第41行,来自普通导入*
从libvtkCommonPython import*获取文件"/usr/local/lib/python2.6/dist-packages/VTK-5.4.2-py2.6.egg/vtk/common.py",第7行
ImportError:libvtkCommonPythonD.so.5.4:无法打开共享对象文件:没有这样的文件或目录
所以我想知道我错过了什么?我尝试将/usr/local/lib/vtk-5.4添加到PATH和PYTHONPATH环境变量中,但仍然得到相同的结果.任何提示或建议?
注意: libvtkCommonPythonD.so.5.4作为libvtkCommonPythonD.so.5.4.2的符号链接存在于/usr/local/lib/vtk-5.4中
这是我的基本用例:
Labview收到来自外部硬件的触发后开始收集模拟数据.它监视此数据并在模拟数据达到阈值时触发另一块硬件.每个试验的阈值可以有不同的值.但是,操作员可能希望能够重做试验(如果由于噪声或未按预期达到阈值而将触发器发送到早期).
是否可以递增/递减索引,或者我是否需要使用移位寄存器,我可以根据需要递增/递减(如果按下重做按钮则减少它)?
谢谢
阿齐姆
寻求Labview数据收集计划的一些帮助.如果我可以在每个通道以8kHz(提供16个数据点)收集2ms的数据(我使用National Instruments数据采集板在4个模拟通道上采集数据).DAQ-MX收集任务提供4个波形的一维阵列.
如果我不显示数据我可以做的所有计算时间大约是2ms,如果处理循环落后于收集循环,则可以.在Labview的前面板中更新图表会引入不可接受的延迟.我们不需要非常快速地更新显示器,可能在5-10Hz就足够了.但我不知道如何设置它.
我目前的Labview VI有三个并行循环
使用队列将数据从集合循环传递到其他循环.Labview示例给了我一些想法,但我被卡住了.
任何建议,参考,想法将不胜感激.
谢谢
阿齐姆
跟进问题
eaolson建议我重新对数据进行采样以用于显示目的.来自DAQ-MX读数的数据是一维波形阵列.所以我需要以某种方式构建或连接每个通道的波形数据.然后在更新前面板图表之前重新采样数据.我想最好的方法是对数据进行排队,并在显示循环中使堆栈构建出列,并根据屏幕分辨率重新采样数据,然后更新图表.会不会有任何其他方法.我将查看(NI Labview论坛)[ http://forums.ni.com/ni/board?board.id=170]以获取eaolson提供的更多信息.
更新