Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];

Вниз

Не открывается TADODataSet   Найти похожие ветки 

 
palva ©   (2008-01-01 12:32) [0]

Пытаюсь открыть ADODataSet1 (метод Open)
получаю "Missing Connection or ConnectionString"
Ну и что тут такого криминального? А если мне надо открыть?
Можно, конечно, использовать CreateOleObject. Но может быть и через VCL как-то можно? Какие-то флаги, опции в DataSet установить? Искал-искал - ничего не нашел.


 
Плохиш ©   (2008-01-01 14:12) [1]


> palva ©   (01.01.08 12:32)  
> Пытаюсь открыть ADODataSet1 (метод Open)
> получаю "Missing Connection or ConnectionString"

Хм, достаточно глупая шутка, даже для нового года...


 
easy ©   (2008-01-01 14:24) [2]

http://www.flagalphabet.zmva.ru/sem_int.html


 
sniknik ©   (2008-01-01 15:15) [3]

> Какие-то флаги, опции в DataSet установить?
для чего? что делаем то? телепатор перегорает уже от нагрузки (есть мысль что нужно не открытие... а что тогда? автор не скажет, дельфимастер не перекрестится... пошлет только, сами знаете куда).

> Искал-искал - ничего не нашел.
веревка на балконе, мыло в ванной. очень нужные веши найди их, будет "чтото нашол"...

Плохиш ©   (01.01.08 14:12) [1]
> Хм, достаточно глупая шутка, даже для нового года...
ну да. "не ищите сложных объяснений, тому что можно обьяснить просто глупостью" © ктото. не помню.
но вообщето, возможен и более "сложный" вариант.


 
palva ©   (2008-01-01 18:11) [4]


>> Какие-то флаги, опции в DataSet установить?
> для чего? что делаем то? телепатор перегорает уже от нагрузки

Так ведь открыть надо. А VCL-ная обертка над ADO почему-то требует, чтобы было соединение с базой данных. А открыть надо, чтобы наполнить данными, отсортировать по некоторой последовательности колонок - ну мало ли для чего еще. На VBScript я это делаю, почему бы мне не захотеть сделать то же самое на Delphi?


 
Anatoly Podgoretsky ©   (2008-01-01 18:54) [5]

> palva  (01.01.2008 18:11:04)  [4]

В этом случае тебе надо сваливаться ниже, на уровень ADO


 
DrPass ©   (2008-01-01 19:22) [6]


> А открыть надо, чтобы наполнить данными, отсортировать по
> некоторой последовательности колонок - ну мало ли для чего
> еще. На VBScript я это делаю, почему бы мне не захотеть
> сделать то же самое на Delphi?

Без проблем. Создаешь СОМ-объект Recordset, подсовываешь его TADODataset"у в соотв. свойство. После этого оно у тебя уже открыто и внимательно слушает :)


 
palva ©   (2008-01-01 19:57) [7]


> В этом случае тебе надо сваливаться ниже, на уровень ADO

Ну здесь вопросов не возникает. Но тогда не будет возможности подключить какие-нибудь DataControls

> DrPass ©   (01.01.08 19:22) [6]
ADODataSet1.ComObject := CreateOleObject("ADODB.RecordSet");
компилятор меня извещает, что
ComObject - Read-only Property
ADOQuery1 еще попробовал. То же самое.


 
palva ©   (2008-01-01 20:33) [8]

Вот модельный пример на "голом" ADO (VBScript)

Const adVarChar = 200
Const adInteger = 3
Set rs = CreateObject("ADODB.Recordset")
rs.Fields.Append "F1", adInteger
rs.Fields.Append "F2", adVarChar, 30
rs.Fields.Append "F3", adInteger
rs.Open
rs.AddNew
rs.Fields("F1").Value = 2
rs.Fields("F2").Value = "11111"
rs.Fields("F3").Value = 1
rs.AddNew
rs.Fields("F1").Value = 2
rs.Fields("F2").Value = "22222"
rs.Fields("F3").Value = 2
rs.AddNew
rs.Fields("F1").Value = 1
rs.Fields("F2").Value = "33333"
rs.Fields("F3").Value = 2
rs.AddNew
rs.Fields("F1").Value = 1
rs.Fields("F2").Value = "44444"
rs.Fields("F3").Value = 1
rs.Sort = "F1, F3"
rs.MoveFirst
Do While Not rs.EOF
 MsgBox rs.Fields("F2")
 rs.MoveNext
Loop
rs.Sort = "F3 DESC, F1"
rs.MoveFirst
Do While Not rs.EOF
 MsgBox rs.Fields("F2")
 rs.MoveNext
Loop


 
Anatoly Podgoretsky ©   (2008-01-01 20:56) [9]

> palva  (01.01.2008 19:57:07)  [7]

Ну надо смотреть в реализацию TAdoDataset как там реализовано подключение RecordSet

Я бы попробовал сделать то же самое, что и в VB и попробовать подключить полученый RecordSet к одноименному свойству в TAdoDataset

Проверять тебе самому.


 
sniknik ©   (2008-01-01 21:23) [10]

> Вот модельный пример на "голом" ADO (VBScript)
это пример не открытия, а создания рекордсета. создается обьект потом поля... все правильно, все логично (в отличие от вопроса).
пример создания в справке дельфи тоже есть. ну, синтаксис другой..., ну так дельфи не vb не с и т.д.


 
DrPass ©   (2008-01-01 23:42) [11]


> palva ©   (01.01.08 19:57) [7]

Свойство ComObject немножко из другой оперы. Тебе нужно свойство Recordset


 
sniknik ©   (2008-01-02 00:18) [12]

> Тебе нужно свойство Recordset
эт вы о чем? зачем? все нормально, стандартно (VCL), делается, единственное что нужно, это читать справку предметно, без экивоков на другие языки/привычки.
ну и еще, естественно, до того как в справку лезть, нужно правильно вопрос задать (себе естественно) "а что же мы собственно делаем?", а то можно долго читать в одном месте в то время как делается совсем другое.


 
DrPass ©   (2008-01-02 01:13) [13]


> sniknik ©   (02.01.08 00:18) [12]

Это я о том, как создать произвольный ADOшный набор данных и подсунуть его ADODataSet для дальнейшей работы средствами VCL. Именно так (ADODataSet1.Recordset:= ...) оно стандартно и делается. Причем тут другие языки и привычки - я что-то вас не понял.


 
palva ©   (2008-01-02 01:54) [14]

Спасибо за подсказки, у меня получилось примерно так:

var
 rs: _Recordset;
begin
 rs := CoRecordset.Create;
 rs.Fields.Append("F1", adInteger, 0, adFldUnspecified);
 rs.Fields.Append("F2", adVarChar, 30, adFldUnspecified);
 rs.Fields.Append("F3", adInteger, 0, adFldUnspecified);
 rs.Open(EmptyParam, EmptyParam, 2, 2, 0);
 ADODataSet1.Recordset :=  _Recordset(rs);
 ADODataSet1.Append;
 ADODataSet1.Fields[0].Value := 2;
 ADODataSet1.Fields[1].Value := "11111";
 ADODataSet1.Fields[2].Value := 1;
 ADODataSet1.UpdateRecord;
 ...

ADODataSet1, по-моему, получился живой, возвращает то, что положено. С сортировкой и с присоединением DBGrid"a буду ковыряться завтра. Там какие-то странности.


 
palva ©   (2008-01-02 01:56) [15]

> ADODataSet1.Recordset :=  _Recordset(rs);
Этот кастинг, конечно лишний.


 
sniknik ©   (2008-01-02 02:36) [16]

> для дальнейшей работы средствами VCL.
зачем "для дальнейшей"? если желаемое изначально "не выходя из VCL" делается, надо лиш почитать справку про создание датасета. с примером, и правильно...

хотя, конечно, зачем читать? так веселее... поборемся с трудностями, послушаем вредных советов (сначала их спровоцируем конечно)...

> Причем тут другие языки и привычки - я что-то вас не понял.
а вот посмотри ниже своего поста на [14] может и поймешь. может быть.
странности не там, они "тут.


 
DrPass ©   (2008-01-02 02:55) [17]


> sniknik ©   (02.01.08 02:36) [16]

Эту демагогию "опытного мастера" я уже пару раз слышал :) Конкретных примеров, правда, так и не дождался. Не дождусь и в этот раз. Но это, в общем-то и не важно.


 
sniknik ©   (2008-01-02 11:16) [18]

> Эту демагогию "опытного мастера" я уже пару раз слышал :)
о! парой не ограничится, поводов великое множество... (были бы правила форума пожестче, я бы закрывал вопросы дающие такой повод. но при либеральных как здесь только одна надежда перевоспитать... безнадега.)

> Не дождусь и в этот раз.
естественно! я жду вопросов на которые можно ответить, а их нет (и видимо не было в той "демагогии")
не хочется поощрять подход многих на этом форуме - "ложи любой бред по видом вопроса! они типа должны, они догадаются."
хотя бы старожилы должны понять, вопросы надо задавать продуманно, с описанием того что, и как делаешь (а не просто как, без цели), и т.д., т.е. понятными! (какая понятность сдесь, если первая реакция что это глупая шутка?).
кстати я всетаки догадался что именно делается, при всей искаженности смысла вопроса... почему же вы не можете догадаться по намеку (прямому! без всяких искажений)? я ведь практически уже ответил... осталось догадаться о названии метода и из справки скопировать пример. (вот уж чего делать точно не буду).
но вы думаю не считаете себя должными догадываться (а как же тогда с обратной ситуацией с вопросом?), ну так я тебя разочарую, ответа с конкретными примерами не будет (было бы о чем писать, элементарное действие то, мне просто стыдно было бы выкладывать это как пример)
и вообще ->
понятный, грамотно заданный вопрос = можете ожидать такого же ответа.
бред = бред/ничего/закрытая века/оффтоп на личность спрашивающего/.../"демагогия" о том как надо задавать вопросы. но только не "конкретный ответ/пример".
доступно?


 
palva ©   (2008-01-02 11:20) [19]

sniknik ©
> желаемое изначально "не выходя из VCL" делается, надо лиш почитать справку про создание датасета. с примером
Я не понимаю, какую справку и какой пример вы имеете ввиду. Нужный хэлп не нахожу. Ваш совет
> веревка на балконе, мыло в ванной. очень нужные веши найди их, будет "чтото нашол"...
тоже не помог, увы.
Сразу скажу, что с созданием датасета у меня проблем нет. Компонента кладется на форму и объект создается при создании формы. Трудности возникают с его открытием, о чем я и написал в первом же вопросе. К сожалению логику вопроса вы не поняли.
> все правильно, все логично (в отличие от вопроса)


 
sniknik ©   (2008-01-02 11:36) [20]

> Сразу скажу, что с созданием датасета у меня проблем нет.
есть, даже в том виде (вроде привычном вам) у вас есть ошибки, в [14] у вас открывается динамический (вроде бы. кстати константы пользовать не удобнее?) курсор с пессимистической блокировкой... такого типа рекордсет визуальные контролы не поддерживают (вот они и "странности"), тут правда не совсем уверен, дело в том что если и провайдер не поддерживает данную комбинацию то он поставит по умолчанию что может совпасть с дельфевским (есть шанс что все будет хорошо), + вы используете методы не рекомендованные к использованию той же справкой, с исключением если вы не делаете собственный рекордсет. (я бы советовал внять совету справки).

> Трудности возникают с его открытием, о чем я и написал в первом же вопросе.
в который раз уже, вам нужно не открытие а создание! (да в "оригинальных" действие совмещено, но с чего вы взяли что в дельфи так же?)

> К сожалению логику вопроса вы не поняли.
не только я. см. начало. но я в отличии от других сразу понял о чем речь (не логику так подоплеку). попыткой "чего сделать" был ваш вопрос. (если было бы еще и описание... то ответ думаю был бы сразу, еще до моего первого поста.)


 
sniknik ©   (2008-01-02 11:45) [21]

> вроде бы. кстати константы пользовать не удобнее?
так и есть, точно - adOpenDynamic, adLockPessimistic. помню еще. :о))


 
palva ©   (2008-01-02 12:29) [22]

> sniknik ©   (02.01.08 11:36) [20]
Не всё понял, но за советы спасибо.


 
DrPass ©   (2008-01-02 13:11) [23]


> sniknik ©   (02.01.08 11:16) [18]

Ну опять-же таки... Если речь идет о CreateDataSet (я правильно понял "намек"?), то в справке, если меня память не подводит, четким английским языком было написано, что приложения не должны вызывать этот метод. Что новичок из такого хелпа усвоит?


 
sniknik ©   (2008-01-02 13:33) [24]

> то в справке, если меня память не подводит, четким английским языком было написано, что приложения не должны вызывать этот метод.
заблуждаешься, не "не должны" а "нет необходимости прямо вызывать" т.к. вызывается (обычно) автоматически. разница однако.
тут необходимость появилась, и?... не будем использовать изза непонятого предупреждения, лучше влезем в "генофонд" со своим "велосипедом", попутно ругаясь что он нас не понимает... так чтоли?


 
palva ©   (2008-01-02 14:31) [25]

Вы как хотите, господа, но сортировать оно не хочет. DBGrid я присоединил. Но после сортировки вижу, что одна запись пропала, а одна дублируется.

procedure TForm1.Button1Click(Sender: TObject);
var
 rs: _Recordset;
begin
 rs := CoRecordset.Create;
 rs.Fields.Append("F1", adInteger, 0, adFldUnspecified);
 rs.Fields.Append("F2", adVarChar, 30, adFldUnspecified);
 rs.Fields.Append("F3", adInteger, 0, adFldUnspecified);
 rs.Open(EmptyParam, EmptyParam, adOpenStatic, adLockPessimistic, 0);
 ADODataSet1.Recordset := rs;
 ADODataSet1.Append;
 ADODataSet1.Fields[0].Value := 2;
 ADODataSet1.Fields[1].Value := "11111";
 ADODataSet1.Fields[2].Value := 1;
 ADODataSet1.Append;
 ADODataSet1.Fields[0].Value := 2;
 ADODataSet1.Fields[1].Value := "22222";
 ADODataSet1.Fields[2].Value := 2;
 ADODataSet1.Append;
 ADODataSet1.Fields[0].Value := 1;
 ADODataSet1.Fields[1].Value := "33333";
 ADODataSet1.Fields[2].Value := 2;
 ADODataSet1.Append;
 ADODataSet1.Fields[0].Value := 1;
 ADODataSet1.Fields[1].Value := "44444";
 ADODataSet1.Fields[2].Value := 1;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 ADODataset1.Sort := "F3,F1";
 ADODataset1.First;
 while not ADODataset1.EOF do begin
   ShowMessage(ADODataset1["F2"]);
   ADODataset1.Next;
 end
end;


 
palva ©   (2008-01-02 23:17) [26]

Разобрался. После добавления и модификации последней записи надо было вставить Post либо уйти с этой записи, чтобы обновление состоялось. А у меня шло сразу sort. В результате последняя запись была неправильна (дублировала предпоследнюю).

А в общем, ответ на вопрос [0] оказался отрицательным. Не выходя за рамки традиционных средств VCL наполнение "отсоединенного" рекордсета сделать нельзя.

Спасибо всем кто проявил участие.


 
sniknik ©   (2008-01-03 00:00) [27]

> Не выходя за рамки традиционных средств VCL наполнение "отсоединенного" рекордсета сделать нельзя.
ты читать то умеешь? исходя из сей ветки можно сказать, что частично. некоторые слова сознанием просто не воспринимаются. открытым текстом. (а я то надеялся догадается, так же как нас о смысле своих действий догадываться заставлял. т.е. соодекватно. нда мечтать не вредно.)

и создать "отсоединенный" можно , и наполнить, и открыть и "отсоединить", все можно, единственное открыть "отсоединенно" нельзя, бо нечего...
но "уперся" ты именно в это, вот вынь тебе да положь "открытие из ничего" только потому, что в других местах подобное видел, а теперь еще и выводы глобальные из этого делаешь.


 
palva ©   (2008-01-03 00:49) [28]

Ну а что вы обижаетесь?
> некоторые слова сознанием просто не воспринимаются
Естественно, что при вашей манере общения, грамотности и уровне понимания вопроса многие ваши слова всерьез не воспринимаются.


 
Германн ©   (2008-01-03 01:23) [29]


> sniknik ©   (03.01.08 00:00) [27]

Коль.
> соодекватно
- имхо новояз. Сам придумал?


 
Германн ©   (2008-01-03 01:26) [30]


> palva ©   (03.01.08 00:49) [28]

Прими к сведению конкретный период времени и не обижайся. Очень трудно в сей период найти общий язык. :)


 
palva ©   (2008-01-03 01:47) [31]

Германн ©   (03.01.08 01:26) [30]
Ага, пойду лучше винца налью, если дети еще не всё выпили.


 
Германн ©   (2008-01-03 02:00) [32]


> palva ©   (03.01.08 01:47) [31]
>
> Германн ©   (03.01.08 01:26) [30]
> Ага, пойду лучше винца налью, если дети еще не всё выпили.
>
>

Тоже вариант неплохой.
Если мне не изменяет память - ты турист со стажем. Значит с вариантами у тебя нет особых проблем.


 
sniknik ©   (2008-01-03 02:06) [33]

> Ну а что вы обижаетесь?
за державу обидно ;(, родное ADO хаите... ;( ;( ;(

> многие ваши слова всерьез не воспринимаются.
оно и видно. полное игнорирование, всего что не понимаете, а т.к. не понимаете многого...
кстати "сакраментальные" слова вовсе не я произнес. но ты видно всех игнорируешь. флаг в руки, и дальше так держать!
p.s.
лучше бы ветку на первых двух постах закрыл, как глупую шутку... и угораздило же догадаться о смысле в бреде. что называется "горе от ума". :) все, телепатор на свалку.

> - имхо новояз. Сам придумал?
новое? значит сам.

> Очень трудно в сей период найти общий язык. :)
период не при чем. период ничто, личность все!


 
Германн ©   (2008-01-03 02:13) [34]


> > Очень трудно в сей период найти общий язык. :)
> период не при чем. период ничто, личность все!
>

Молчу.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.008 c
2-1198576815
Washington
2007-12-25 13:00
2008.01.27
Системная информация


15-1197716283
No_Dead
2007-12-15 13:58
2008.01.27
Сбой какой-то


2-1198595725
авыф
2007-12-25 18:15
2008.01.27
mainmenu


2-1198561832
mikola
2007-12-25 08:50
2008.01.27
использую indy


2-1198681178
fics
2007-12-26 17:59
2008.01.27
TCanvas (нарисовать стрелочку)





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