![]() |
|
|
#1
|
|||
|
|||
|
Подскажите а можно как нибудь результат запроса 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
|
||||
|
||||
|
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-й вариант ![]() |
|
#3
|
||||
|
||||
|
Для этого используй не такой запрос как у тебя, а что-то типа:
Код:
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); |
|
#4
|
|||
|
|||
|
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
|
||||
|
||||
|
Явно укажи какие поля тебе нужны:
Код:
s:=ADOQuery3.FieldByName('nick').AsString+' '+ADOQuery3.FieldByName('pass').AsString+ и т.д.; |
|
#6
|
||||
|
||||
|
Ну так если тебе самому впадлу немного подумать, то правильный запрос будет таким:
Код:
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); |
|
#7
|
|||
|
|||
|
Ой все норм))спасибо всем))
Последний раз редактировалось Booo, 24.08.2009 в 23:42. |
|
#8
|
|||
|
|||
|
Теперь другая прроблема появилась ...
в общем у меня все происходит так ..пользователь подключился,зарегистрировался или авторизовался,занес свой ник в список онлайн пользователей,хочет обновить о себе инфу включая и ник .. Значит что происходит :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 . Что мне делать? |