Update row in database

조회 수: 4 (최근 30일)
Han
Han 2018년 3월 20일
편집: Greg 2018년 3월 23일
Hi ..
In database I have Id and its type is 'int', also I have Name and its type is varchar
When I tried to update the Id it was work:
Id = str2num(get(handles.ID,'String'));
y = exec(conn,'select Id from admin_info')
y = fetch(y);
y1=(y.Data)
colnames3={'Id'};
whereclause3 = ['WHERE ID= ' num2str(y1{1})]
update(conn,'admin_info', colnames3, Id, whereclause3);
But the update for the name it doesn't work !
name = get(handles.name, 'String')
x = exec(conn,'select name from admin_info');
x = fetch(x);
x1 = x.Data
n = x1{1}
colnames2={'name'};
whereclause2 = ['WHERE name = ' n]
update(conn,'admin_info', colnames2, name, whereclause2);
  댓글 수: 7
Bob Thompson
Bob Thompson 2018년 3월 21일
I realize this is things you probably already checked, but it's what I usually go through to investigate my errors.
Have you confirmed that name, n, and whereclause2 are all proper values and classes?
If those are all correct, then it appears that all of the inputs to the update() command are correct and I don't know that I'm really going to be able to help you much, since I don't really know anything about Simulink commands.
Greg
Greg 2018년 3월 22일
편집: Greg 2018년 3월 22일
I may be way off here (not a lot of experience with databases), but:
It looks like you are retrieving the entire column from the database, using MATLAB to find the row you want to change, then telling the database to change it. Why not build a single exec command and let the database do it all?
Otherwise, I notice you have a space before the = in the second where clause, but not the first. I don't think that matters, but maybe?

댓글을 달려면 로그인하십시오.

채택된 답변

Greg
Greg 2018년 3월 22일
Reading the documentation for update, it indicates that the new data (input number 4) cannot be a character array. The ID worked because it can handle numeric matrix. To update a char/string entry, use a cellstr input.
update(conn,'admin_info', colnames2, cellstr(name), whereclause2);
  댓글 수: 6
Bob Thompson
Bob Thompson 2018년 3월 22일
편집: Bob Thompson 2018년 3월 22일
You don't want to do cellstr(n), you want cellstr(whereclause2).
Of course I could also be totally just blowing smoke and have no idea what I'm doing.
Han
Han 2018년 3월 22일
Ok, thank you anyway.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Han
Han 2018년 3월 22일
Thank you to everyone..
Now it's working for me.
In the future, if someone faced the same problem, here is the code:
x = exec(conn,'select name from admin_info');
x = fetch(x);
xx = char(x.Data)
n = sprintf('''%s''',xx)
colnames2={'name'};
whereclause2 = (['WHERE name =' n])
update(conn,'admin_info', colnames2, cellstr(name), whereclause2);
  댓글 수: 1
Greg
Greg 2018년 3월 23일
편집: Greg 2018년 3월 23일
That is extremely complex code.
x = exec(conn,'select name from admin_info');
x = fetch(x);
colnames2={'name'};
% Probably want an actual index here, not a hardcoded 1
whereclause2 = sprint('WHERE name = ''%s''',x.Data{1});
Your use of
xx = char(x.Data);
will not do well when x.Data has multiple rows.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Structures에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by