![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL - Update [D6, Access]
Fostr © (2006-09-16 21:03:00)Господа!
Есть таблица с данными, есть запрос на обновление определенной записи в таблице (таблицу открываю ADOTable1):
UPDATEMainTable
SET MainTable.Имя = 'Владимир'
WERE MainTable.Имя = 'Vladimir'
Delphi выдает ADOQuery1: CommandText does not return a result set.
Не могу найти с чем это связано. Прошу помочь.
P.S. К хелпу по Delphi прошу не отправлять - я там уже достаточно покапался, но если есть конкретный раздел, то тогда милости прошу.
Vedem (2006-09-20 01:47:00) [1]
> 1. Перед Add часто забывают Clear
C этим согласен...
> 2. В каких-то версиях Дельфи без патчей ADO сканирование
> параметров действительно проводилось.
Вроде что-то было в D5, врать не не буду.
Desdechado (2006-09-19 20:13:00) [2]> Вы хотите сказать, что есть большая разница между "Text :=" и "Add()" ?
Некоторая таки есть:
1. Перед Add часто забывают Clear
2. В каких-то версиях Дельфи без патчей ADO сканирование параметров действительно проводилось.
vedem (2006-09-19 19:07:00) [3]Вы хотите сказать, что есть большая разница между "Text :=" и "Add()" ?
Смотрим матчасть:
TADOQuery = class(TCustomADODataSet)
....
published
property SQL: TWideStrings read GetSQL write SetSQL;
end;
////////////////////////
procedure TADOQuery.SetSQL(const Value: TWideStrings);
begin
FSQL. Assign(Value);
end;
далее
TWideStrings = class(TPersistent)
.........
public
function Add(const S: WideString):Integer; virtual;
........
property Text: WideString read GetTextStr write SetTextStr;
end;
////////////////////////
procedure TWideStrings.SetTextStr(const Value: WideString);
var
P, Start: PwideChar;
S: WideString;
begin
BeginUpdate;
try
Clear;
P := Pointer(Value);
if P <> nil then
while P^ <> #0 do
begin
Start := P;
while not InOpSet(P^, [ #0, #10, #13]) do Inc(P);
SetString(S, Start, P - Start);
Add(S);
if P^ = #13 then Inc(P);
if P^ = #10 then Inc(P);
end;
finally
EndUpdate;
end;
end;
И где сканирование параметров?
ANB (2006-09-19 17:28:00) [4]
> vedem © (19.09.06 17:26) [24]
Дык он уже поста 4 назад поправился :)
> а уж ADD() или Text := ... это дело вкуса
Не думаю. Многие компоненты при любом изменении текста запроса начинают его сканнировать в поисках параметров. Оно нам надо ?
vedem (2006-09-19 17:26:00) [5]Да человек делал OPEN вместо EXECSQL, а уж ADD() или Text := ... это дело вкуса.
ANB (2006-09-18 18:46:00) [6]
> SQL.Clear;
> SQL.Add('UPDATE MainTable');
> SQL.Add('SET MainTable.Имя = ''Владимир''');
> SQL.Add('WHERE MainTable.Имя = ''Владимир''');
Я ж написал уже - не надо так делать. Тем более советовать.
vedem (2006-09-18 18:31:00) [7]А если так:
With ADOQuery1 do
begin
Active:=False;
SQL.Clear;
SQL.Add('UPDATE MainTable');
SQL.Add('SET MainTable.Имя = ''Владимир''');
SQL.Add('WHERE MainTable.Имя = ''Владимир''');
ExecSQL;
end;
DBGrid1.DataSource.DataSet.Refresh;
ANB (2006-09-18 17:55:00) [8]
> что даже простые программы работы с БД можно писать, будучи
> нулевым как в области механизмов общения
Да можно. Пишут же. А потом удивляются, почему не работает.
MsGuns (2006-09-18 17:31:00) [9]И еще (душа не выдержала):
Ребята, ну кто вам сказал, что даже простые программы работы с БД можно писать, будучи нулевым как в области механизмов общения с этими базами в частности, так и в области проектирования БД в целом ?
Ну почему все понимают, что нельзя вот просто так сесть в авто, включить зажигание, снять с тормозов, нажать сцепление, газ, выехать на ул.Горького и лихо покатить без окончания курсов, сдачи экзаменов ГАИ и т.д. ?
А программировать "базы" с навыками школяра-двоешника - пожалуйста !
Поймите одно: ОДИН РАЗ потратив время (день, два, неделю - сколько надо) на штудированиетого же хэлпа по классам любой из "базовых" закладок Делфи, вы
- во-первых, поймете главное: для чего все это и как оно работает
- во-вторых, избавите себя от многочисленных потерь сил, времени и нервов
при разработке и, особенно !, отладке.
- в-третьих, перестаните, наконец выглядеть комично в глазах людей вовсе не "джидайского" уровня, а просто элементарно осведомленных.
Лень, конечно, двигатель прогресса. Но топливо для этого двигателя - настойчивость, целеустремленность и терпение
MsGuns (2006-09-18 17:22:00) [10]>Fostr (18.09.06 16:42) [14]
>А дедушки могли бы просто указать на конкретный раздел хелпа... (ну не внимателен человек, пропустил эту инфу), вместо поливания грязью.
В свете сабжевой фразы
>P.S. К хелпу по Delphi прошу не отправлять - я там уже достаточно покапался, но если есть конкретный раздел, то тогда милости прошу
"поливание грязью" есть норомальная реакция нормальных НЕЛЕНИВЫХ людей на явную ложь человека, не потрудившегося просто нажать пресловутую F1 на ЛЮБОМ из используемых компонентов доступа и почитать хотя бы введение (Description), а привыкшего, следуя, очевидно, архангельско-фароновской "школе", просто кидать компоненты на форму и ожидать, что у него "все и так заработает".
ANB (2006-09-18 17:04:00) [11]
> SQL.Clear;
> SQL.Add('UPDATE MainTable');
> SQL.Add('SET MainTable.Имя = ''Владимир''');
> SQL.Add('WHERE MainTable.Имя = ''Владимир''');
Не делай так больше.
SQL,Text :=
намного лучше.
sniknik (2006-09-18 17:02:00) [12]> некоторым это покажется банально, но таким же новичкам как я будет полезно.
для полезности, повыбирай тут все что относится к TADOTable, TADOQuery, TADOStoredProc
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1157032916&n=1
и тут чуть чуть
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1155735139&n=1
sniknik (2006-09-18 16:56:00) [13]> То есть вопросы можно задавать лишь в случае проблемы написания "серьезных" проектов ....
нет конечно. тем более даже серьезная проблема может "проявиться" на совсем несерьезном проекте, а "тренировочном" например.
но тем не менее, не с вопросами же "сколько будет 2*2" в математический форум постить... сначала поиск и самостоятельные изыскания после в форум, иначе попросту не сможех вопрос грамотно задать. (ну а если вообще не можеш, значит "не дорос еще", но и на такие случае есть форум для "начинающих" (чаще читаю "ленивых"))
Sergey13 (2006-09-18 16:50:00) [14]> [14] Fostr (18.09.06 16:42)
Не обращай внимания. Просто на будущее, если уж осознаешь себя новичком, то и задавай вопрос в соответствующий раздел.
Fostr (2006-09-18 16:42:00) [15]То есть вопросы можно задавать лишь в случае проблемы написания "серьезных" проектов? А по мелочам лучше держать язык за зубами, что бы не опозориться перед дедушками? А дедушки могли бы просто указать на конкретный раздел хелпа... (ну не внимателен человек, пропустил эту инфу), вместо поливания грязью.
MsGuns (2006-09-18 16:30:00) [16]>..но таким же новичкам как я будет полезно
читать что написано в хэпе, а не вылазить в белый свет с первыми же непонятками ;)
Fostr (2006-09-18 16:20:00) [17]Было вот что:
По нажатию кнопки должен выполниться данный запрос:
WithADOQuery1 do
begin
Active:=False;
SQL.Clear;
SQL.Add('UPDATE MainTable');
SQL.Add('SET MainTable.Имя = ''Владимир''');
SQL.Add('WHERE MainTable.Имя = ''Владимир''');
Active:=True;
end;;
DBGrid1.DataSource.DataSet.Refresh;
В такой записи выдавалась ошибка: "ADOQuery1: CommandText does not return a result set", поскольку (теперь я уже знаю) запрос не возвращает в данном случае никаких значений.
Решением данной проблемы было: Вместо "Active:=True" использовать "ExecSQL"
Понимаю, некоторым это покажется банально, но таким же новичкам как я будет полезно.
ANB (2006-09-18 14:42:00) [18]
> Рецидив нарциссизма или мазохизма ;)
Этот, как его - Чай Рукоблудов
MsGuns (2006-09-18 13:13:00) [19]"Тихо сам с собою.."
Рецидив нарциссизма или мазохизма ;)
sniknik (2006-09-18 11:28:00) [20]> Прошу прощения, я все уже сделал.
это конечно здорово, что у тебя все хорошо, но это никого не интересует... интерены проблема(если она есть конечно) + решение.
иначе ветка "пустоцвет".