Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.08.2009, 16:20
Booo Booo вне форума
Новичок
 
Регистрация: 03.07.2008
Сообщения: 93
Репутация: 10
По умолчанию Без понятия ...

Подскажите а можно как нибудь результат запроса sql внести в переменную ,если запрос с условием ...там насколько я знаю возвращается не текст,а запись .
то есть кодинг примерно вот такой
Код:
adoquery3.sql.text:='SELECT * FROM table1  WHERE nick='+quotedStr(Edit9.Text)+ ' and pass='+quotedstr(edit10.text)+'';
ADOQuery3.open;
edit8.Text:=inttostr(ADOQuery3.RecordCount);
if ADOQuery3.RecordCount <> 0 then
begin
s:='#A' + [вот здесь мне нужны результаты запроса через пробел (в бд не только ник и пасс ,там еще инфа ,аська ,и тп.)и вот здесь они должны идти через пробел];
Socket.SendText(s);
то есть послать сокет должен примерно следующее
s:='#A'+(nick+' '+pass+' '+icq..и т.д.)
Подскажите как такое сделать полегче...
Ответить с цитированием
  #2  
Старый 08.08.2009, 18:17
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

1-й вариант:
Код:
s:='#A'+ADOQuery3.Fields[0].asString+'<пробел>'+ADOQuery3.Fields[1].asString+'<пробел>'+ADOQuery3.Fields[2].asString+'<пробел>'+
и т.д. по количеству полей начиная с нулевого поля.

2-й вариант:
Код:
var 
i:integer;
...
твой запрос
...
for i:=0 to ADOQuery3.FieldCount-1 do
s:=s+'<пробел>'+ADOQuery3.Fields[i].asString;
s:='#A'+s;

Если полей не сильно много - я бы взял 1-й вариант
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #3  
Старый 08.08.2009, 18:29
Аватар для Appolon
Appolon Appolon вне форума
Новичок
 
Регистрация: 10.01.2008
Адрес: гЕйск
Сообщения: 76
Репутация: 16
По умолчанию

Для этого используй не такой запрос как у тебя, а что-то типа:
Код:
adoquery3.sql.text:='SELECT nick+' '+pass+' '+icq+' '+ и.т.д.  FROM table1  WHERE nick='+quotedStr(Edit9.Text)+ ' and pass='+quotedstr(edit10.text)+'';
ADOQuery3.open;
edit8.Text:=inttostr(ADOQuery3.RecordCount);
if ADOQuery3.RecordCount <> 0 then
 begin
  s:='#A' + ADOQuery3.Fields.Fields[0].AsString; 
  Socket.SendText(s);
__________________
From VasYa with LoVe...
Ответить с цитированием
  #4  
Старый 15.08.2009, 01:30
Booo Booo вне форума
Новичок
 
Регистрация: 03.07.2008
Сообщения: 93
Репутация: 10
По умолчанию

Yurk@
Второй вариант не сработал ..делфи выделяет таким запросом всегда одно и то же поле ,которое мне не нужно ..то есть вот код:
Код:
adoquery3.sql.text:='SELECT * FROM table1  WHERE nick='+quotedStr(Edit9.Text)+ ' and pass='+quotedstr(edit10.text)+'';
ADOQuery3.open;
for i:=0 to ADOQuery3.FieldCount-1 do
s:=s+' '+ADOQuery3.Fields[i].asString;
s:='#A'+s;
socket.sendtext(s);

второй вариант я как то не понял =) обьясни плиз))
Appolon
запрос не верный ..
Ответить с цитированием
  #5  
Старый 15.08.2009, 11:19
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Явно укажи какие поля тебе нужны:
Код:
s:=ADOQuery3.FieldByName('nick').AsString+' '+ADOQuery3.FieldByName('pass').AsString+ и т.д.;
Ответить с цитированием
  #6  
Старый 16.08.2009, 14:27
Аватар для Appolon
Appolon Appolon вне форума
Новичок
 
Регистрация: 10.01.2008
Адрес: гЕйск
Сообщения: 76
Репутация: 16
По умолчанию

Ну так если тебе самому впадлу немного подумать, то правильный запрос будет таким:
Код:
adoquery3.sql.Add('SELECT nick+'' ''+pass+'' ''+icq FROM table1 ');
adoquery3.sql.Add(' WHERE nick='+quotedStr(Edit9.Text));
adoquery3.sql.Add(' and pass='+quotedstr(edit10.text));
ADOQuery3.open;
edit8.Text:=inttostr(ADOQuery3.RecordCount);
if ADOQuery3.RecordCount <> 0 then
 begin
  s:='#A' + ADOQuery3.Fields.Fields[0].AsString; 
  Socket.SendText(s);
__________________
From VasYa with LoVe...
Ответить с цитированием
  #7  
Старый 23.08.2009, 23:45
Booo Booo вне форума
Новичок
 
Регистрация: 03.07.2008
Сообщения: 93
Репутация: 10
По умолчанию

Ой все норм))спасибо всем))

Последний раз редактировалось Booo, 24.08.2009 в 23:42.
Ответить с цитированием
  #8  
Старый 25.08.2009, 00:38
Booo Booo вне форума
Новичок
 
Регистрация: 03.07.2008
Сообщения: 93
Репутация: 10
Смех

Теперь другая прроблема появилась ...
в общем у меня все происходит так ..пользователь подключился,зарегистрировался или авторизовался,занес свой ник в список онлайн пользователей,хочет обновить о себе инфу включая и ник ..
Значит что происходит :1)Удаляем сначала из списка пользователей его старый ник ; 2)Обновляем данные и заносим в бд ; 3)Добавляем новый ник в список пользователей ,и рассылаем этот список клиентам.
вот собстно код :
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
tmp_query: string;
i:integer;
begin
//УДАЛЕНИЕ СТАРОГО НИКА!!!
adoquery4.sql.Add('SELECT nick FROM table1 ');
adoquery4.sql.Add(' WHERE login='+quotedStr(Edit2.Text));
adoquery4.sql.Add(' and pass='+quotedstr(edit4.text));
ADOQuery4.open;
edit3.Text:=inttostr(ADOQuery4.RecordCount);
if ADOQuery4.RecordCount <> 0 then
 begin
  s:=ADOQuery4.Fields.Fields[0].AsString;
  listbox1.Items.delete(listbox1.Items.IndexOf(s));
  end ;

//ОБНОВЛЕНИЕ ДАННЫХ
ADOQUery1.Active:=false;
DAtaSource1.Enabled:=false;
tmp_query:=ADOQUERY1.SQL.Text;
adoquery1.sql.text:='UPDATE table1 SET'#13#10+
                            ' id = ' + QuotedStr(Edit1.Text) + ','#13#10 +
                            'info = '+ QuotedStr(Edit7.Text) + ','#13#10 +
                            ' ip = ' + QuotedStr(Edit5.Text) + ','#13#10 +
                            ' nick = ' + QuotedStr(Edit6.Text) +   #13#10 +
                            'WHERE login ='+QuotedStr(Edit2.Text)+ #13#10 +
                            'AND pass = ' +QuotedStr(Edit4.text);
ADOQuery1.ExecSQL;
ADOQuery1.SQL.Text :=tmp_query;
ADOQUery1.Active:=true;
Datasource1.Enabled:=true;
//СОСТАВЛЕНИЕ НОВОГО СПИСКА ЮЗЕРОВ
{Добавляем его в юзер лист}
   ListBox1.Items.Add(Edit6.Text);
   {Записываем в s команду для посылки нового списка юзеров}
   s := '#U';
   for i := 0 to ListBox1.Items.Count-1 do
    s := s+ListBox1.Items[i]+';';
   {...и рассылаем этот список всем клиентам}
   for i := 0 to Ss1.Socket.ActiveConnections-1 do
    Ss1.Socket.Connections[i].SendText(s);
   Exit;

end;
А теперь собственно о проблеме .
Первый раз все прекрасно обновляется..но когда я хочу обновить во второй раз данные о себе то получаю еррор Stack overloff .
Что мне делать?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:54.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter