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

Вниз

Как установить курсор в TTable на определенную запись ?   Найти похожие ветки 

 
Kostafey ©   (2008-05-02 18:33) [40]

> [33] Palladin ©   (02.05.08 18:20)

Ну сделал в аксесе - нифига не позиционирует
курсор. У вас точно значек ключика рядом с полем
не нарисован? :)


 
Palladin ©   (2008-05-02 18:36) [41]

точно, потому что он был нарисован, и я специально его снял, закрыл аццес, закрыл проект, открыл проект нажал на кнопку и треугольник в TDBGrid у меня перешел на вторую запись которую я и делал Locate...


 
Kostafey ©   (2008-05-02 18:41) [42]

Ладно. Сделаем так. Вот сырцы этого хеллоуворда :)
http://stitch.ifolder.ru/6395257

Нужно сначала добавить Exp1 в ODBC.

В чем отличие от вашей реализации?


 
Palladin ©   (2008-05-02 18:42) [43]

в том что я не пользовался ODBC )


 
Kostafey ©   (2008-05-02 18:45) [44]

> в том что я не пользовался ODBC )

А чем?


 
Palladin ©   (2008-05-02 18:47) [45]

как чем? ADO


 
Kostafey ©   (2008-05-02 18:51) [46]

> как чем? ADO

Что прям TADOTable?


 
Kostafey ©   (2008-05-02 18:54) [47]

> [46] Kostafey ©   (02.05.08 18:51)
> > как чем? ADO
>
> Что прям TADOTable?

Хе, дак с TADOTable все работает.

Нужно чтоб с TTable заработало.


 
Kostafey ©   (2008-05-02 18:56) [48]

> [47] Kostafey ©   (02.05.08 18:54)

Да еще используя OLE DB соединение.

Конечно. Легко спичками костер разжечь,
нужно трением! :)


 
Kostafey ©   (2008-05-02 19:03) [49]

Ладно, будем работать в сторону "сделать поле ключевым"


 
sniknik ©   (2008-05-02 19:05) [50]

> Ладно. Сделаем так. Вот сырцы этого хеллоуворда :)
чтото там не видно предлагавшейся проверки возврат TRUE...


 
Kostafey ©   (2008-05-02 19:12) [51]

> [50] sniknik ©   (02.05.08 19:05)
> чтото там не видно предлагавшейся проверки возврат TRUE...

А я ее (проверку) тут действительно не делал, вы правы.
Но я ее делал непосредственно в исправляемом приложении.


 
sniknik ©   (2008-05-02 19:14) [52]

ну так сдесь оно честно не находит, и оставляет курсор там где был.


 
Kostafey ©   (2008-05-02 19:15) [53]

> [50] sniknik ©   (02.05.08 19:05)

Гм. тут действительно возвращает false...


 
Kostafey ©   (2008-05-02 19:17) [54]

> [52] sniknik ©   (02.05.08 19:14)

гм странно и так
if Table1.Locate("ind1", 4, []) then
и так
if Table1.Locate("ind1", "4", []) then
 ShowMessage("true")
else
 ShowMessage("false");

возвращает false


 
sniknik ©   (2008-05-02 19:28) [55]

и правильно возвращает заметь.

без ключевого поля, dblink (или через что там работает BDE с внешними sql движками)  просто не может спозиционироваться на нужную запись, даже если ее найдет. поэтому даже не пытается...
добавь в таблицу ключевой поле (автоинкремент например) и ничего больше не меняя попробуй тот же пример... найдет. также как если поменять движок на найтивный (там где RecNo чтото значит) тоже найдет, тут уже даже без ключа. т.к. позицию может и по номеру строки установить.


 
Kostafey ©   (2008-05-02 19:29) [56]

> [54] Kostafey ©   (02.05.08 19:17)

А!!!
Врубился.

Если подключение осуществляется к Access,
то
if Table1.Locate("ind1", "4", []) then
 ShowMessage("true")
else
 ShowMessage("false");

верет false.
TForm1.Table1AfterScroll(DataSet: TDataSet);
не отработает на Table1.Locate

если впереди добавить Table1.FetchAll;
будет работать. Правда из НД
исчезают все записи идущие ниде найденной.

Далее, подключаемся к MS SQL Server 2000.
на вопрос
if Table1.Locate("ind1", "4", []) then
 ShowMessage("true")
else
 ShowMessage("false");

отвечает true,
но курсоп на найденную запись не позиционирует.
Запись Table1.FetchAll; ничего не меняет.

вот.


 
Kostafey ©   (2008-05-02 19:33) [57]

> Далее, подключаемся к MS SQL Server 2000.

Забыл сказать TForm1.Table1AfterScroll(DataSet: TDataSet);
в этом случае сработает Table1.Locate
установив в 1-ю запись.


 
Kostafey ©   (2008-05-02 19:38) [58]

> [55] sniknik ©   (02.05.08 19:28)

Спасибо за глубокие разъяснения.

Благодарю всех участвоавших в обсуждении.

Пожалуй, вопрос закрыт.


 
sniknik ©   (2008-05-02 19:42) [59]

> Забыл сказать TForm1.Table1AfterScroll(DataSet: TDataSet);
> в этом случае сработает Table1.Locate
> установив в 1-ю запись.
опять пробуешь у себя в проекте... в примере, смена движка на MSSQL-ый ничего в поведении не меняет.
как стояло к примеру на 3-й записи, так и остается. на 1-ю не перескакивает. и true не возвращает.


 
Kostafey ©   (2008-05-02 19:50) [60]

> опять пробуешь у себя в проекте... в примере, смена движка
> на MSSQL-ый ничего в поведении не меняет.
> как стояло к примеру на 3-й записи, так и остается. на 1-
> ю не перескакивает. и true не возвращает.

Не-а, не в проекте. Тут же в "хеллоуворде".
При смене СУБД НА SQL Server (подключение аналогично через ODBC)
поведение Table1.Locate действительно меняется:

1 Отрабатывает TForm1.Table1AfterScroll(DataSet: TDataSet);
2 Курсор устанавливается с 1-ю запись.
3 Table1.Locate("ind1", "4", []) возвращает true


 
Anatoly Podgoretsky ©   (2008-05-02 22:01) [61]


> Если он уж TADOQuery и TADOTable "не жалует",
> то что он сделает со мной за TTable? :)))

Тебе лучше не знать.


 
Германн ©   (2008-05-03 01:06) [62]


> Kostafey ©   (02.05.08 18:32) [39]
>
> > [37] Palladin ©   (02.05.08 18:25)
> > это.... это sniknik... кровавый убийца, объявивший джихад
> > TADOQuery и TADOTable...
>
> Если он уж TADOQuery и TADOTable "не жалует",
> то что он сделает со мной за TTable? :)))
>

Да ничего он особого не сделает за TTable. TTable в отличие от TADOQuery и TADOTable вполне нормальный компонент. Родной для BDE. А вот два других вышеназванных - это "ублюдки" (bastards) на родном языке их авторов.


 
Kostafey ©   (2008-05-03 01:35) [63]

> [62] Германн ©   (03.05.08 01:06)

Пасибо, познавательно.
Но вот интересно это логические выводы их собственно
опыта или просто религиозный джихад? :)

Да, ну всетретил я пару глюков в TADOQuery,
было дело, заменил TADODstaSet - все пошло...


 
Германн ©   (2008-05-03 01:48) [64]


> Kostafey ©   (03.05.08 01:35) [63]
>
> > [62] Германн ©   (03.05.08 01:06)
>
> Пасибо, познавательно.
> Но вот интересно это логические выводы их собственно
> опыта или просто религиозный джихад? :)

Это логические выводы. Причём в основном не мои. И в основном это выводы Николая и других знатоков работы с базами. (Ну и я когда мне понадобилось поработать с ADO тоже кой-чего лично понял). Дело не столько в глюках, сколько в возможности их наличия. Ведь TADOQuery и TADOTable были разработаны для идиотов. Вся необходимая (и естественная для ADO функциональность) реализована в TADODstaSet и в "урезанном" его варианте TADOCommand. А TADOQuery и TADOTable, насколько я понял, были разработаны для того, чтобы перевод уже имеющейся программы с BDE на ADO можно было бы выполнить простой заменой компонент TTable и TQuery соответственно на TADOTable и TADOQuery и ни о чём более не думать. Поэтому в них много лишнего, "не родного".


 
sniknik ©   (2008-05-03 02:39) [65]

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

а лишнего там практически ничего нет, урезано только, в TADOQuery есть минимальная вставка (SQL, ExecSql) и даже с ними, такой мелочью, путаница (в основном начинающим) и поначалу глюки в реализации были (исправили после).

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


 
Германн ©   (2008-05-03 03:08) [66]


> sniknik ©   (03.05.08 02:39) [65]
>
> > Поэтому в них много лишнего, "не родного".
>

Хм. В следущий раз в ответе ограничусь в определениях.


 
palva ©   (2008-05-03 08:57) [67]

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

Я ветку пробежал бегло, почти не понимая. И сложилось впечатление какой-то черной магии. Можно, конечно, разобраться во всем этом самому, почитать исходники, погонять примеры. И любители подобных занятий, конечно найдутся. Существуют же люди, изучающие, теорию шахматных дебютов или кубик Рубика. Но у меня даже желания разобраться во всем этом не возникло. Освоил я несколько тропинок через этот лес и хватит с меня. А если возникнет нужда с этих тропинок сойти, то я уж лучше перейду на АДО НЕТ. Сдается мне, это попроще будет. А для меня, как для математика к тому же и приятнее, работать на логичной и прозрачной системе.


 
sniknik ©   (2008-05-03 11:30) [68]

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

> то я уж лучше перейду на АДО НЕТ. Сдается мне, это попроще будет.
не работал пока, но уверен там тоже есть свои нюансы... и если с их помощью попробовать работать также как с BDE, с каким нибудь парадоксом... проблем не оберешься.

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

и кстати вспомнил про АДО НЕТ, был тут вопрос про его функции (функции в запросе) которые работают в нем и не работают в простом ADO. и что это значит? -> попытка универсализировать сам sql в net и не зависеть от sql-я движка... не видиш сдесь проблем? например в падении производительности. или в том что затруднится использование возможностей именно самого движка программистом, в изучении (и путанице между ними) двух моделей, прослойки (net) и движка базы (если конечно хочеш пользоваться полными возможностями).


 
MsGuns ©   (2008-05-03 18:20) [69]

>Германн ©   (03.05.08 01:48) [64]
>Вся необходимая (и естественная для ADO функциональность) реализована в TADODstaSet и в "урезанном" его варианте TADOCommand

Во-первых, не вся. В частности, есть еще TADOConnection, у которого достаточно общирная собственная функциональность.

Во вторых, TADOCommand вовсе не "урезанный", и совсем не "вариант" TADODataSet. Это просто другой класс. Хотя во многих случаях может использоваться вместо TADODataSet, как, впрочем, и наоборот.


 
Плохиш ©   (2008-05-03 18:39) [70]


> palva ©   (03.05.08 08:57) [67]
> Мне вот что странно. Почему VCL позиционируется как логичная
> и удобная система? Почему постоянно советуют - читайте хэлп
> - и в то же время для того, чтобы воспользоваться компонентом,
>  описанным в документации, требуется помощь и доброжелательное
> расположение духа какого-то Николая или какого-то Александра?

После прочтения хелпа, обычно ничьей помощи уже не требуется. Все вопросы возникающие здесь происходят от нежелания что-либо читать, а желания готового кода, да ещё и с описанием.


 
Kostafey ©   (2008-05-03 19:03) [71]

> [70] Плохиш ©   (03.05.08 18:39)

palva ©   (03.05.08 08:57) [67]

Вот что господа, не согласен я с вами.
Обратите внимание на начало ветки - фактически цитирование
хелпа.

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


 
MsGuns ©   (2008-05-03 19:11) [72]

>Kostafey ©   (03.05.08 19:03) [71]

Вам уже было выше указано, что

- во-первых, нигде из кода неясно, был ли успешен поиск по Locate
- во-вторых, метод Locate у TTable не "датасетовский", а "бидешный" (т.е. TBDEDataSet), а посему возможно надо искать причину в нем, а именно в его затруднении однозначно идентифицировать записи, полученные из "неродного" источника. Либо перестать ездить задом наперед и использовать "родные" компоненты для доступа к серверу.
- в-третьих, ничего гнизвестно ни про типы полей вашего НД, ни про возможность наличия "пустых" (NULL) значений. Это немаловажный момент, т.к. хорошо известно что данные на сервере - одно, они же в дельфи - другое, а в интерпретации программиста - третье.


 
Kostafey ©   (2008-05-03 19:19) [73]

> - во-первых, нигде из кода неясно, был ли успешен поиск
> по Locate

Об этом было сказано трижды.


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

Это решение в данный момент неприемлемо


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

Об этом тоже речь шла.

Да и вообще, причина сказанного в> [71] Kostafey ©   (03.05.08 19:03) не
техническая, а скорее политическая :)


 
MsGuns ©   (2008-05-03 19:31) [74]

>Kostafey ©   (03.05.08 19:19) [73]
>Об этом было сказано трижды.

И все три "словами".

>Это решение в данный момент неприемлемо

Что неприемлимо - разобраться КАК работает Locate в TBDEDataSet ?

>Об этом тоже речь шла.

О том, какой тип данных в таблице, а какой в датасете ? Будьте любезны, ткните носом, где именно "шла речь".


 
Kostafey ©   (2008-05-03 19:43) [75]

> И все три "словами".

Да ладно, а это что:

> [54] Kostafey ©   (02.05.08 19:17)
> > [52] sniknik ©   (02.05.08 19:14)
>
> гм странно и так
> if Table1.Locate("ind1", 4, []) then
> и так
> if Table1.Locate("ind1", "4", []) then
> ShowMessage("true")
> else
> ShowMessage("false");



> Что неприемлимо - разобраться КАК работает Locate в TBDEDataSet
> ?

Непремлемо переводить приложение с BDE на ADO


> О том, какой тип данных в таблице, а какой в датасете ?
> Будьте любезны, ткните носом, где именно "шла речь".

С удовольствием:

> [16] Kostafey ©   (02.05.08 17:57)
> > Да работало это.
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> Table1.Locate("ind1", "4", []);
> end;
> установит на 1-ю запись
>
> ind1 - числовое поле


 
MsGuns ©   (2008-05-03 19:48) [76]

> ind1 - числовое поле

Имеется в виду Integer ? Если так, то почему Table1.Locate("ind1", "4", []);


 
Kostafey ©   (2008-05-03 19:57) [77]

> [76] MsGuns ©   (03.05.08 19:48)

http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%B7%D1%83%D0%B8%D1%81%D1%82%D0%B8%D0%BA%D0%B0
Практикуетесь на мне? :)


 
palva ©   (2008-05-03 20:55) [78]


> Плохиш ©   (03.05.08 18:39) [70]
> После прочтения хелпа, обычно ничьей помощи уже не требуется.

Если я написал программу, которая не противоречит хэлпу, то все должно работать. Наверно, даже если я нарушил рекомендации данные в хэлпе, то тоже все должно работать, если это всего лишь рекомендации. А вот когда мастера начинают философствовать на тему, что вот этот объект использовать не надо, а в этом объекте используется другая логика, то дело плохо. Конечно, мастеров здесь можно только поблагодарить, они методом тыка и изучением исходников это все освоили и делятся своим опытом. Но когда мастера защищают свой плохо написанный и плохо документированный инструмент... Нет, по человечески их конечно можно понять. Если люди будут продолжать пользоваться этим инструментом, то и мастера будут востребованы, поскольку на одном хэлпе без советов мастеров этим инструментом пользоваться проблемно.


 
MsGuns ©   (2008-05-03 21:38) [79]

>Kostafey ©   (03.05.08 19:57) [77]
>Практикуетесь на мне? :)

Нет, просто пытался помочь разобраться. Для чего и уточнял некоторые детали. Если это Вас раздражает, то приношу извинения и в дальнейшем в Ваши ветки не заглядываю. Ибо Вам, очевидно, нужна не помощь, а что-то иное ;)


 
sniknik ©   (2008-05-03 21:44) [80]

> Если я написал программу, которая не противоречит хэлпу, то все должно работать.
в данном случае она противоречит.

> поскольку на одном хэлпе без советов мастеров этим инструментом пользоваться проблемно.
я пользовался изначально только им, проблем не возникало... (были только заморочки с RDS, даже книгу разобраться с ним купил, но это побочно. нигде не использовал. чисто ради интереса)
компоненты TADOTable, TADOQuery, TADOStoredProc именно там, в хелпе, были названы "переходными от BDE" и не рекомендованы к использованию в новых проектах. стойкая неприязнь к ним у меня возникла позже, когда насмотрелся на тупость разработчиков упорно использующих только их. несмотря на все рекомендации.

имхо, ты понапридумывал себе страшилок на ровном месте, теперь окружающих ими пугаешь.

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



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

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

Наверх





Память: 0.64 MB
Время: 0.119 c
2-1210619333
Nemeziz
2008-05-12 23:08
2008.06.01
Как проверить изменялся ли файл


2-1209111130
DJ Kondakov
2008-04-25 12:12
2008.06.01
Добавление нового пункта в pop-up меню


15-1208262117
Vlad Oshin
2008-04-15 16:21
2008.06.01
Помогите с базой 1с версии 8.1 или языком. Актуальные итоги.


2-1210649320
noviceman
2008-05-13 07:28
2008.06.01
Как передать запись (TMyRecord) в процедуру...


2-1210059787
Petya
2008-05-06 11:43
2008.06.01
Поиск MS SQL





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