Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-1086697699
Baks
2004-06-08 16:28
2004.06.27
Вопрос на зацепку


4-1085052160
Denis_ada
2004-05-20 15:22
2004.06.27
О системе


6-1083665736
mRodion
2004-05-04 14:15
2004.06.27
TIdTCPClient.OnWork


3-1085831410
AlexG
2004-05-29 15:50
2004.06.27
Непонятная проблема с передачей double чисел в Excel...


1-1086687898
SendeR
2004-06-08 13:44
2004.06.27
Неудалимая прога......





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский