我正在MATLAB中编写GUI并使用mksqlite
。我在将参数传递给它时遇到问题。
该命令在以下mksqlite([ 'INSERT INTO ' , z , ' VALUES (?)' ], data);
位置:
z = 'table name'
,'table name'
从列表框中选择。data
插入来自inputdlg
。问题在于?
参数,因为不同的表具有不同的列数。有人知道?
动态声明的方法吗?
a = get(handles.listbox1,'String');
b = get(handles.listbox1,'Value');
tabela=a{b};
disp(tabela);
mksqlite( 'param_wrapping', 1 );
mksqlite( 'result_type', 1 );
[results,colnames] = mksqlite(['SELECT * FROM ', tabela])
disp(results);
e=fieldnames(results);
v=size(e);
for r=1:v
prompt={'Wprowadź '};
dlg_title = 'Wprowadź ';
num_lines = 1;
answer = inputdlg(prompt,dlg_title,num_lines);
imie=answer{1};
disp(imie);
t=answer{1};
data{r}=t;
disp(data);
z=a{b};
end;
mksqlite([ 'INSERT INTO ' , z , ' VALUES (?,?,?,?)' ], data); %// << this should be dynamic
想法是您应该VALUES(...)
动态创建您的表或为每个表案例获取预定义的语句。
您可以尝试使用String
-to- String
map,其中键是表名,而值是VALUES
语句。可以使用containers.Map
对象在MATLAB中实现。这是我的意思的示例:
假设您的表名是table_names = {'table1','table2','table3'};
,并且假设这些表分别具有2、3和4个字段。VALUES
因此,SQL命令的相应部分为:sql_values = {'VALUES (?,?)','VALUES (?,?,?)','VALUES (?,?,?,?)'};
现在,我们Map
从这些String
组合中构建出一个:
values_map = containers.Map(table_names,sql_values);
构建完之后,Map
您可以使用从列表框中获得的表名(a
在您的代码中)并检索正确的VALUES
语句:
vals_str = values_map(a);
或者,您可以使用逻辑确定?,
在括号后放入括号的正确数量VALUES
:
switch a
case 'table1'
nVals = 2;
case 'table2'
nVals = 3;
case 'table3'
nVals = 4;
end
vals_str = ['VALUES (' repmat('?,',[1 nVals-1]) '?)'];
注意:您可以根据情况保留其他vals_str
权利,而无需Strings
在运行时进行构建。我个人不太喜欢这样的版本,原因是我无法解释。
最后,您可以vals_str
在中使用mksqlite
:
mksqlite(['INSERT INTO ' z ' ' vals_str], data);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句