Форум: "Базы";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
ВнизПрограммно сформировать RecordSet Найти похожие ветки
← →
Kerk © (2004-05-27 13:21) [0]Т.е. функция должна возвращать RecordSet созданный самостоятельно. Как это сделать?
← →
Nikolay M. © (2004-05-27 13:44) [1]Ы?
Сам-то понял, что написал?
← →
Kerk © (2004-05-27 13:53) [2]Возможно недостаточно точно выразился...
Вот ты шлешь в базу SQL-запрос, тебе возвращается RecordSet.
А мне нужно написать функцию:function blabla(aa: integer): RecordSet;
(что-то вроде)
чтоб она возвращала RecordSet.
P.S. Вообще с БД почти не работал. Поэтому не пинайте. :P
← →
Ega23 © (2004-05-27 13:55) [3]Function CreateQuery(const DbName, QueryText: string;opening:boolean=true;SessName:string="default"):TRxquery;
var Qu:TRxquery;
begin
result:=nil;
if NoConnectGlb then exit; //@@ 09-10-2001
try
Qu:=TRxQuery.Create(Application);
with Qu do
begin
DatabaseName := DbName;
SessionName := SessName;
RequestLive:=false;
SQL.Add(QueryText);
if opening then Open;
if opening and isEmpty then Qu:=nil;
result:=Qu;
end;
except on E:exception do
raise EGPException.Create(E.message+" "+QueryText);
end;
// dont forget to Free !!!!
end;
Вот, например.
← →
Курдль © (2004-05-27 13:55) [4]
> P.S. Вообще с БД почти не работал.
Тогда берешь книжку по БД, с которой "почти не работал" и углубляешься на пару дней. Потом - работаешь.
← →
slgeo © (2004-05-27 13:56) [5]>Вот ты шлешь в базу SQL-запрос, тебе возвращается RecordSet
Не RecordSet, а DataSet
А зачем такая функция, можно поинтересоваться?
← →
Skyle © (2004-05-27 14:01) [6]
> function blabla(aa: integer): RecordSet;
Что такое aaa : Integer?
Что такое RecordSet?
И откуда в этом RecordSet должны быть данные?
← →
Kerk © (2004-05-27 14:04) [7]
> slgeo © (27.05.04 13:56) [5]
Что-то вроде плагинов к AppServer"у. Реализуют бизнес-логику.
> Ega23 © (27.05.04 13:55) [3]
Пасибки. Но мне бы на низком уровне. Нужны ADO-шные структуры.
> Курдль © (27.05.04 13:55) [4]
Ну так дай мне ссылку на соответствующий мануал по ADO. plz.
← →
Kerk © (2004-05-27 14:07) [8]
> Что такое aaa : Integer?
Условное обозначение параметров функции. :)
> Что такое RecordSet?
Как мне тут сказали... это DataSet.. В общем, набор записей.
> И откуда в этом RecordSet должны быть данные?
Это может быть либо результатом SQL-запроса, либо заполнено руками.
← →
Курдль © (2004-05-27 14:08) [9]
> > Курдль © (27.05.04 13:55) [4]
>
> Ну так дай мне ссылку на соответствующий мануал по ADO.
> plz.
Москва, угол Мясницкой и Лубянки, Магазин "Библио-глобус"
← →
slgeo © (2004-05-27 14:12) [10]>Это может быть либо результатом SQL-запроса, либо заполнено >руками.
Тогда Ega23 тебе все прекрасно расписал в [3], остается только адаптировать это дело к ADO
← →
Kerk © (2004-05-27 14:15) [11]
> Тогда Ega23 тебе все прекрасно расписал в [3], остается
> только адаптировать это дело к ADO
Так сам принцип мне понятен...
Мне непонятна сама работа с ADO-шными структурами.
← →
Danilka © (2004-05-27 14:20) [12]
> Это может быть либо результатом SQL-запроса
Запрос к чему? СУБД какая?
И еще, где дальше этот набор данных будет использоваться? Может тебе и не АДО вообще нужно.
← →
Ega23 © (2004-05-27 14:22) [13]А TADOQuery разве не является потомком от TDataSet?
Просто спросил...
← →
Kerk © (2004-05-27 14:24) [14]
> Запрос к чему? СУБД какая?
Без разницы какая... через ADO работаем.
> И еще, где дальше этот набор данных будет использоваться?
> Может тебе и не АДО вообще нужно.
Этот набор записей получает AppServer, обрабатывает, фильтрует, сортирует и т.д. в соответствии с желаниями клиента и передает этому клиенту как результат SQL-запроса...
В общем, клиент шлет в AppServer SQL-запрос, AppServer всякое там химичит и возвращает этот набор записей, про который мы говорим.
← →
Kerk © (2004-05-27 14:30) [15]
> Ega23 © (27.05.04 14:22) [13]
> А TADOQuery разве не является потомком от TDataSet?
> Просто спросил...
Чего вы тут на VCL зациклились?
Сказал же что набор записей возвращает плагин. Этот плагин может на чем угодно быть написан...
← →
slgeo © (2004-05-27 14:32) [16]>2Kerk
>В общем, клиент шлет в AppServer SQL-запрос, AppServer всякое >там химичит и возвращает этот набор записей, про который мы >говорим
Судя по всему у тебя трехзвенка и почитать придеться не только по ADO, но и по MIDAS и TClientDataset
← →
Ega23 © (2004-05-27 14:35) [17]Чего вы тут на VCL зациклились?
Сказал же что набор записей возвращает плагин. Этот плагин может на чем угодно быть написан...
Тогда что в твоём понимании RecordSet?
← →
Vlad © (2004-05-27 14:35) [18]
> Kerk © (27.05.04 14:30) [15]
Есть такой тип _RecordSet в Дельфи. (uses ADODB)
← →
Vlad © (2004-05-27 14:37) [19]
> Ega23 © (27.05.04 14:35) [17]
RecordSet - это ADO-шный интерфейс
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdobjodbrec.asp
← →
Digitman © (2004-05-27 14:39) [20]
> Kerk © (27.05.04 14:24) [14]
во избежание никчемных обоюдных инсинуаций, просто недоразумений и флагов с надписью "LMD" все что от тебя требовалось - сразу же обозначить. что под сабжем подразумевается интерфейс. возвращаемый такими-то методами ADO-объектов ... равно, впрочем, как и не-ADO : метод DAO.DBEngine.Workspace.Database.OpenRecordset точно так же возвращает ИНТЕРФЕЙС уаправления набором данных
в этом плане борландовский термин-идентификатор TDataSet мало чем отличается от мелкомягкого традиционного RecordSet : и то и другое - не более чем программные интерфейсы, а не куча структурированной инф-ции, соответствующей критериям выборки НД, как тебе, видимо, кажется ...
← →
Kerk © (2004-05-27 14:40) [21]
> slgeo © (27.05.04 14:32) [16]
А нельзя просто показать как это делается?... Неужели я так много прошу.. Не думаю, что какой-то глобальный вопрос затронул.
Книжки я потом обязательно прочитаю.
П.С. Сам не люблю когда в подобном тоне говорят, но ты уж извини, времени на книжки совсем нет.
← →
Kerk © (2004-05-27 14:47) [22]
> Digitman © (27.05.04 14:39) [20]
значит процедура должна создать экземпляр интерфейса (не силен в терминологии)... потом передать ссылку на него... и т.д.
а там проблем с RefCount не будет?
← →
slgeo © (2004-05-27 14:59) [23]> Kerk © (27.05.04 14:47) [22]
Поле RefCount класса TInterfacedObject служит счетчиком вызовов интерфейсного объекта и используется по принятой в Windows схеме: при каждом обращении к методу Add интерфейса IUnknown счетчик наращивается на единицу, при каждом обращении к Release - на единицу сбрасывается. Когда значение этого поля становится равно 0, интерфейсный объект уничтожается и освобождается занимаемая им память.
← →
Anatoly Podgoretsky © (2004-05-27 14:59) [24]Kerk © (27.05.04 14:47) [22]
Как это делается можно подсмотреть в исходниках VCL
← →
Digitman © (2004-05-27 15:10) [25]
> процедура должна создать экземпляр интерфейса (не силен
> в терминологии)
очень жаль
если терминологически предположить, что ADO - это объект. то говорят так : такой-то функциональный метод такого-то объекта возвращает как результат такой-то интерфейс такого-то объекта
> а там проблем с RefCount не будет?
где "там" ? и какие "проблемы" ?
← →
Kerk © (2004-05-27 15:13) [26]
> где "там" ? и какие "проблемы" ?
"там" - в экземпляре интерфейса..
при передаче его туда-сюда, что будет с RefCount?
← →
Vlad © (2004-05-27 15:26) [27]
> Kerk © (27.05.04 15:13) [26]
Ты передаешь не интерфейс, а указатель на него, соотв. нужно позаботиться, чтобы все переменные, которым присвоен этот указатель были освобождены в конце - это уже твоя забота.
← →
Kerk © (2004-05-27 15:31) [28]
> Vlad © (27.05.04 15:26) [27]
а как я буду их освобождать, если я создаю экземпляр интерфейса, заполняю данные, передаю указатель на него и завершаюсь?
← →
Digitman © (2004-05-27 15:43) [29]
> Kerk © (27.05.04 15:31) [28]
давай так- чтобы понять "сложное", начни с заведомо простого : объяви произвольный интерфейс , создай произвольный класс-наследник TInterfacedObject, программно обратись к нему и оттрассируй это обращение пошагово ! у тебя появятся конкретные вопросы, на которые здесь будут даны и конкретные ответы ..
IMyInterface = interface
end;
TMyIntfClass = class(TInterfacedObject, IMyInterface)
end;
...
procedure GetmyInterfacedObject;
var
MyInterface: IMyInterface;
begin
MyInterface := TMyIntfClass.Create; //ЗДЕСЬ ставишь брейкпойнт
end; // и трассируешь ПОШАГОВО весь алгоритм, вникая в каждую asm-подробность, пока не встретится asm-инструкция RET
← →
Vlad © (2004-05-27 15:47) [30]Вот тут есть неплохой пример работы с Recordset
http://www.delphiworld.narod.ru/base/mssql_unit.html
← →
Digitman © (2004-05-27 15:49) [31]не оч удачный, кажется, пример : включенный оптимизатор, скорей всего, пошлет меня на http://www.lleo.aha.ru/na) .. проверять не буду. но - скорей всего ...
лучше так :
function GetmyInterfacedObject: IMyInterface;
begin
Result := TMyIntfClass.Create; //ЗДЕСЬ ставишь брейкпойнт
end;
...
procedure SomePROCEDURE;
var
MyInterface: IMyInterface;
begin
MyInterface := GetmyInterfacedObject;
end; // ТО ЧТО ТВОРИТСЯ ЗДЕСЬ В ДАННОМ (!!) КОНТЕКСТЕ - КРАЙНЕ ВАЖНО !!
← →
Sandman25+1 (2004-05-27 15:57) [32]Может, я и не в тему, но ...
procedure TMyServer.GetMyData(...): OleVariant;
begin
with TClientDataSet.Create(nil) do
try
FieldDefs.Add(...);
...
CreateDataSet;
AppendRecord(...);
// или Insert; ... Post;;
...
Result := Data;
finally
Free;
end;
end;
← →
Vlad © (2004-05-27 16:02) [33]
> Sandman25+1 (27.05.04 15:57) [32]
То же самое, только ADODataSet вместо ClientDataSet и в кач-ве Result - ADODataSet.RecordSet
(я так думаю)
← →
Kerk © (2004-05-28 15:33) [34]Спасибо всем... немного разобрался.
Еще вопрос. Как вывести Recordset из режима ReadOnly?::CoInitialize(NULL);
_RecordsetPtr rs("ADODB.Recordset");
_variant_t a(("test"));
rs.CreateInstance(__uuidof(Recordset));
if (rs->Supports(adAddNew))
rs->AddNew(a,a);
Что бы я не делал, rs->Supports(adAddNew) возвращает False.
← →
Polevi © (2004-05-29 15:16) [35]открыть не пробовал ?
← →
Kerk © (2004-05-31 11:47) [36]
> Polevi © (29.05.04 15:16) [35]
В смысле открыть? Он же с источником данных не ассоциирован.
← →
Polevi © (2004-05-31 12:03) [37]uses ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
rs:OleVariant;
begin
rs:=CreateOleObject("ADODB.Recordset");
rs.Fields.Append("Test",3);
rs.Open;
rs.AddNew;
rs.Fields["Test"].Value:=666;
rs.Update;
ADODataset1.Recordset:=IUnknown(rs) as _Recordset;
end;
← →
Polevi © (2004-05-31 12:04) [38]ибо нефиг добавлять записи в рекордсет в котором нет ни одного поля
← →
Kerk © (2004-06-02 14:38) [39]
> Polevi © (31.05.04 12:04) [38]
tx. работает.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.033 c