Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Вниз

SQL - Update   Найти похожие ветки 

 
Fostr   (2006-09-16 21:03) [0]

Господа!
Есть таблица с данными, есть запрос на обновление определенной записи в таблице (таблицу открываю ADOTable1):

UPDATE MainTable
SET      MainTable.Имя = "Владимир"
WERE    MainTable.Имя = "Vladimir"

Delphi выдает ADOQuery1: CommandText does not return a result set.
Не могу найти с чем это связано. Прошу помочь.
P.S. К хелпу по Delphi прошу не отправлять - я там уже достаточно покапался, но если есть конкретный раздел, то тогда милости прошу.


 
Anatoly Podgoretsky ©   (2006-09-16 21:16) [1]

Ты бы все таки определился, что у тебя, толи ADOTable1, толи ADOQuery1 и у тебя ошибка в 17 строке.


 
Fostr   (2006-09-16 21:26) [2]

Значит так:
С помощью ADOTable я показываю свою таблицу в DBGrid1,
а с помощью ADOQuery1 делаю запрос к своей таблице.
Извините, но 17-й строки тут не вижу... Где именно ошибка?
Заранее спасибо.


 
Fostr   (2006-09-16 21:28) [3]

Понял. Не WERE, конечно, а WHERE :))


 
Fostr   (2006-09-16 21:41) [4]

Хочу добавить, что при этом данные обновляются.


 
Johnmen ©   (2006-09-16 22:12) [5]

Open vs Execute(Exec) вот в чём вопрос...


 
Desdechado ©   (2006-09-16 22:48) [6]

Open хочет получить назад набор данных, а откуда он у твоего Update возьмется?


 
Anatoly Podgoretsky ©   (2006-09-17 14:05) [7]

А автор до сих пор не привел код.


 
Fostr   (2006-09-18 10:59) [8]

Прошу прощения, я все уже сделал.


 
sniknik ©   (2006-09-18 11:28) [9]

> Прошу прощения, я все уже сделал.
это конечно здорово, что у тебя все хорошо, но это никого не интересует... интерены проблема(если она есть конечно) + решение.
иначе ветка "пустоцвет".


 
MsGuns ©   (2006-09-18 13:13) [10]

"Тихо сам с собою.."

Рецидив нарциссизма или мазохизма ;)


 
ANB ©   (2006-09-18 14:42) [11]


> Рецидив нарциссизма или мазохизма ;)

Этот, как его - Чай Рукоблудов


 
Fostr   (2006-09-18 16:20) [12]

Было вот что:
По нажатию кнопки должен выполниться данный запрос:

With ADOQuery1 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"

Понимаю, некоторым это покажется банально, но таким же новичкам как я будет полезно.


 
MsGuns ©   (2006-09-18 16:30) [13]

>..но таким же новичкам как я будет полезно

читать что написано в хэпе, а не вылазить в белый свет с первыми же непонятками ;)


 
Fostr   (2006-09-18 16:42) [14]

То есть вопросы можно задавать лишь в случае проблемы написания "серьезных" проектов? А по мелочам лучше держать язык за зубами, что бы не опозориться перед дедушками? А дедушки могли бы просто указать на конкретный раздел хелпа... (ну не внимателен человек, пропустил эту инфу), вместо поливания грязью.


 
Sergey13 ©   (2006-09-18 16:50) [15]

> [14] Fostr   (18.09.06 16:42)

Не обращай внимания. Просто на будущее, если уж осознаешь себя новичком, то и задавай вопрос в соответствующий раздел.


 
sniknik ©   (2006-09-18 16:56) [16]

> То есть вопросы можно задавать лишь в случае проблемы написания "серьезных" проектов ....
нет конечно. тем более даже серьезная проблема может "проявиться" на совсем несерьезном проекте, а "тренировочном" например.
но тем не менее, не с вопросами же "сколько будет 2*2" в математический форум постить... сначала поиск и самостоятельные изыскания после в форум, иначе попросту не сможех вопрос грамотно задать. (ну а если вообще не можеш, значит "не дорос еще", но и на такие случае есть форум для "начинающих" (чаще читаю "ленивых"))


 
sniknik ©   (2006-09-18 17:02) [17]

> некоторым это покажется банально, но таким же новичкам как я будет полезно.
для полезности, повыбирай тут все что относится к TADOTable, TADOQuery, TADOStoredProc
http://delphimaster.net/view/3-1157032916/
и тут чуть чуть
http://delphimaster.net/view/3-1157032916/


 
ANB ©   (2006-09-18 17:04) [18]


>  SQL.Clear;
>  SQL.Add("UPDATE MainTable");
>  SQL.Add("SET MainTable.Имя = ""Владимир""");
>  SQL.Add("WHERE MainTable.Имя = ""Владимир""");

Не делай так больше.
SQL,Text :=
намного лучше.


 
MsGuns ©   (2006-09-18 17:22) [19]

>Fostr   (18.09.06 16:42) [14]
>А дедушки могли бы просто указать на конкретный раздел хелпа... (ну не внимателен человек, пропустил эту инфу), вместо поливания грязью.

В свете сабжевой фразы

>P.S. К хелпу по Delphi прошу не отправлять - я там уже достаточно покапался, но если есть конкретный раздел, то тогда милости прошу

"поливание грязью" есть норомальная реакция нормальных НЕЛЕНИВЫХ людей на явную ложь человека, не потрудившегося просто нажать пресловутую F1 на ЛЮБОМ из используемых компонентов доступа и почитать хотя бы введение (Description), а привыкшего, следуя, очевидно, архангельско-фароновской "школе", просто кидать компоненты на форму и ожидать, что у него "все и так заработает".


 
MsGuns ©   (2006-09-18 17:31) [20]

И еще (душа не выдержала):
Ребята, ну кто вам сказал, что даже простые программы работы с БД можно писать, будучи нулевым как в области механизмов общения с этими базами в частности, так и в области проектирования БД в целом ?

Ну почему все понимают, что нельзя вот просто так сесть в авто, включить зажигание, снять с тормозов, нажать сцепление, газ, выехать на ул.Горького и лихо покатить без окончания курсов, сдачи экзаменов ГАИ и т.д. ?
А программировать "базы" с навыками школяра-двоешника - пожалуйста !

Поймите одно: ОДИН РАЗ потратив время (день, два, неделю - сколько надо) на штудирование того же хэлпа по классам любой из "базовых" закладок Делфи, вы
- во-первых, поймете главное: для чего все это и как оно работает
- во-вторых, избавите себя от многочисленных потерь сил, времени и нервов
при разработке и, особенно !, отладке.
- в-третьих, перестаните, наконец выглядеть комично в глазах людей вовсе не "джидайского" уровня, а просто элементарно осведомленных.

Лень, конечно, двигатель прогресса. Но топливо для этого двигателя - настойчивость, целеустремленность и терпение


 
ANB ©   (2006-09-18 17:55) [21]


> что даже простые программы работы с БД можно писать, будучи
> нулевым как в области механизмов общения

Да можно. Пишут же. А потом удивляются, почему не работает.


 
vedem ©   (2006-09-18 18:31) [22]

А если так:
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 18:46) [23]


> SQL.Clear;
> SQL.Add("UPDATE MainTable");
> SQL.Add("SET MainTable.Имя = ""Владимир""");
> SQL.Add("WHERE MainTable.Имя = ""Владимир""");

Я ж написал уже - не надо так делать. Тем более советовать.


 
vedem ©   (2006-09-19 17:26) [24]

Да человек делал OPEN вместо EXECSQL, а уж ADD() или Text := ... это дело вкуса.


 
ANB ©   (2006-09-19 17:28) [25]


> vedem ©   (19.09.06 17:26) [24]

Дык он уже поста 4 назад поправился :)


> а уж ADD() или Text := ... это дело вкуса

Не думаю. Многие компоненты при любом изменении текста запроса начинают его сканнировать в поисках параметров. Оно нам надо ?


 
vedem ©   (2006-09-19 19:07) [26]

Вы хотите сказать, что есть большая разница между "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;


И где сканирование параметров?


 
Desdechado ©   (2006-09-19 20:13) [27]

> Вы хотите сказать, что есть большая разница между "Text :=" и "Add()" ?
Некоторая таки есть:
1. Перед Add часто забывают Clear
2. В каких-то версиях Дельфи без патчей ADO сканирование параметров действительно проводилось.


 
Vedem ©   (2006-09-20 01:47) [28]


> 1. Перед Add часто забывают Clear

C этим согласен...

> 2. В каких-то версиях Дельфи без патчей ADO сканирование
> параметров действительно проводилось.

Вроде что-то было в D5, врать не не буду.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.047 c
15-1162141868
antonn
2006-10-29 20:11
2006.11.19
вопросик по HTML ю...


2-1161869074
Cyrax
2006-10-26 17:24
2006.11.19
Получить реальный порт UDP-сервера


2-1162364066
jimy
2006-11-01 09:54
2006.11.19
dcu


2-1162638407
l|l|l|l|
2006-11-04 14:06
2006.11.19
"Блокирующие" вызовы функций.


15-1162082006
RASkov
2006-10-29 03:33
2006.11.19
Quake III





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский