|
#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-й вариант Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#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); From VasYa with LoVe... |
#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); From VasYa with LoVe... |
#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 . Что мне делать? |