Matlab使用editbox来匹配数据库

时间:2016-03-18 14:31:17

标签: database matlab

从数据库中检索值时,使用editbox更改用户输入时遇到问题。 以下是工作代码。

conn = database('SQL', '', '');
name = input('what is your name: ', 's'); 

sqlquery = ['select Staff.staffPW   from imageProcessing.dbo.Staff '...
       'where Staff.staffID = ' '''' name ''''];

curs = exec(conn,sqlquery);

curs = fetch(curs);
curs.Data

close(curs)
close(conn)

但是现在当我使用编辑框更改输入时,出现了问题

function pushbutton1_Callback(hObject, eventdata, handles)

conn = database('SQL', '', '');
name = get(handles.edit1,'String');


sqlquery = ['select Staff.staffPW   from imageProcessing.dbo.Staff '...
       'where Staff.staffID = ' '''' name ''''];

curs = exec(conn,sqlquery);

curs = fetch(curs);
curs.Data

close(curs)
close(conn)

我可以从工作代码中获取正确的pw,但是来自editbox的输入我什么都没得到。任何人都可以教我如何使它工作?非常感谢!

1 个答案:

答案 0 :(得分:0)

当前问题是你的案例中的String property是一个包含字符串而不只是普通字符串的单元格数组。

MATLAB编辑样式uicontrol能够显示多行文本。要填充多行文本,在这些情况下,字符串可以作为字符串的单元格数组传递,其中每个元素都位于编辑框的不同行。

control = uicontrol('style', 'edit', ...
                    'Max', 2, ...           % A two-line edit box
                    'String', {'Row1', 'Row2'});

因此,即使对于单行编辑框,String属性也可以是字符串的单元格数组,只是一个字符串。因此,从编辑框中检索值时,请务必在使用之前检查它是否为单元格数组(iscell)或字符串(ischar)。

因此,我们可以对您的代码进行调整,我们可以执行以下操作

name = get(handles.edit1, 'String');

% Check to ensure it is a cell array of one string
if iscell(name) && numel(name) == 1
    name = name{1};
end

% Disallow non-strings, cell arrays of multiple strings, or empty strings
if ~ischar(name) || isempty(name)
    error('A valid string must be supplied!');
end

sqlquery = ['select Staff.staffPW   from imageProcessing.dbo.Staff '...
            'where Staff.staffID = ' '''' name ''''];