Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Возникает ошибка при правке значения в DataGrid, Проблема с DataGrid 
:(
    Опции темы
Voldemar2004
Дата 15.10.2005, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



НА форме DataGrid и Adodc. Связал с *.dbf. Свойства DataGrid на удаление, обновление, добавление новых значений = True. ConnectionString: DSN=DELO, CommandType = 2 - adCmdTable, RecordSource=DELO.

При по попытке изменить значение в ячейке происходит ошибка: Error occered while trying to update record. "Во время обновления записи произошла ошибка".
Добавлено @ 17:32
Хотя проблема уже описывалась на http://forum.vingrad.ru/index.php?showtopi...d=1&hl=datagrid но ответа там нет. smile


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Kergan
Дата 15.10.2005, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.8.2005

Репутация: 3
Всего: 5



Можешь попробовать найти TDBgrid - контрол такой, типа DataGrid, но КУДА лучше и стабильнее. Я с ним работаю, никаких проблем, все корректно, в т.ч. проверка правильности введнных данных и прочие мелочи. Скачать его едва ли можно, он довольно большой, с разными библиоеками, а вот у добрых людей с дисками за 70р...
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :(
PM MAIL ICQ   Вверх
Voldemar2004
Дата 15.10.2005, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Цитата(Kergan @ 15.10.2005, 17:52)
Скачать его едва ли можно, он довольно большой,
не проблема у меня скорость загрузки ~ 120 Мб/час. Так ведь он от Borland smile . У меня есть дистрибутивы Delfi и C++ Builder - оттуда вытащить можно? smile


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Kergan
Дата 15.10.2005, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.8.2005

Репутация: 3
Всего: 5



Не знаю, где ты откопал чисто дельфийскую версию, но TDBgrid - это нормальный ActiveX, спокойно работающий в Basic'e... соберу либы, попробую отправить.
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :(
PM MAIL ICQ   Вверх
Voldemar2004
Дата 15.10.2005, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Цитата(Kergan @ 15.10.2005, 19:23)
спокойно работающий в Basic'e... соберу либы, попробую отправить.
На почтовый ящик ? smile Попробую сам поковыряться smile . Какую этот объект требует dll-ку или библиотеку?


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Guest
Дата 15.10.2005, 21:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











kergan и мне кань нб [email protected]
  Вверх
Voldemar2004
Дата 16.10.2005, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Цитата(Guest @ 15.10.2005, 21:36)
kergan и мне кань нб [email protected]
В книге по VB нашел, что можно использовать стандартный DBGrid, входивший в состав VB5, он находится сейчас в папке \tools. Но так у меня еще и C++ Builder, то из папки WINNT\System32 берем файл DBGRID32.OCX и добавлем его в проект. Все работает. smile


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Kergan
Дата 16.10.2005, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.8.2005

Репутация: 3
Всего: 5



А-а-а, поздравлю. Вот только проблемы еще будут с переносимостью, по себе знаю. Контрол кинул. Нужен или нет - решай сам.
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :(
PM MAIL ICQ   Вверх
Voldemar2004
Дата 16.10.2005, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



И еще вопрос: как сделать так, чтобы юзер правил ячейки, как ему вздумается, но в БД в это время ничего не изменялось, потом он нажмет кнопку "Сохранить изменения" - ну и все изменения вступают в силу smile .


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Kergan
Дата 16.10.2005, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.8.2005

Репутация: 3
Всего: 5



Сделай через вторую таблицу. Потом их перекопируешь. Пример:
юзер меняет Таблицу_Рабочую
юзер кликает СОХРАНИТЬ
Из Таблицы_Рабочей копируем в Таблицу_Куда_Желаем_Сохранить
Разумеется обе таблицы должны иметь одинаковую структуру.
ЗЫ если мне память не изменяет, встроенных накопителей, чтобы организовать вышеуказанный алгоритм, нет в DBGrid (и в TDBGrid тоже). Но это не так уж и сложно.
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :(
PM MAIL ICQ   Вверх
Voldemar2004
Дата 16.10.2005, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Цитата(Kergan @ 16.10.2005, 16:56)
Сделай через вторую таблицу. Потом их перекопируешь. Пример:
юзер меняет Таблицу_Рабочую
юзер кликает СОХРАНИТЬ
Из Таблицы_Рабочей копируем в Таблицу_Куда_Желаем_Сохранить
Но тогда юзеры будут работать с реальным файлом БД. Я так прикинул, просто напишу код, который создает резервную копию БД - просто добавляет к имени файла что-то типа db_backup.dbf. И путь юзвери творят что хотят всегда же ведь смогу восстановить. smile


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Kergan
Дата 17.10.2005, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.8.2005

Репутация: 3
Всего: 5



Ну да. В моем способе примерно то же - только резервной является не вся база, а таблица.
А, кстати, какой будет Точка Восстанавления? Исходная пустая структура или последнее нажатие на кнопу "применить"?
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :(
PM MAIL ICQ   Вверх
Voldemar2004
Дата 18.10.2005, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Цитата(Kergan @ 17.10.2005, 17:18)
А, кстати, какой будет Точка Восстанавления? Исходная пустая структура или последнее нажатие на кнопу "применить"?
Нет, это слишком круто для юзеров будет. В БД > 200 полей и 30 000 (!) строк, т.е общее число = 200*30 000 (!!) замучаюсь это отслеживать. Просто сделаю копию на момент открытия БД и все. А они пусть сами потом мучаются, если удалят что-то не то smile .



--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Voldemar2004
Дата 18.10.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



У меня еще проблема с этим True DBGrid'ом: в других Гридах при щелчке мышой сразу появляется номер выбранного столбца, как сделать так, чтобы юзер щелкал по заголовку столбца и сразу показывался номер столбца, а не со второго раза.

В общем работает, только шифт надо держать:
Код

Private Sub TDBGrid1_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox "Номер выбранного столбца = " & Val(TDBGrid1.Col) & " счет идет от 0 "
End Sub



--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Kergan
Дата 18.10.2005, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.8.2005

Репутация: 3
Всего: 5



Там индекс выдается в событиях BeforeColUpdate и AfterColUpdate. В принципе перейти от события клика к этим событиям (их назначение, думаю, понятно) не сложно. ИМХО они удобнее кликов.
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :(
PM MAIL ICQ   Вверх
Voldemar2004
Дата 18.10.2005, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Я все не пойму, как скопировать выбранный столбец первой таблицы в столбец другой таблицы. У этого объекта есть свойство обратиться к элементу в Гриде, как к элементу матрицы или нет?

Кажется я понял, в чем была ошибка с MS DBGrid - если удалить ячейку с текстовым полем, то все равно - пусто в ней или есть какое-то значение, чего не сделаешь с полем, в котором число - если удалил число, то надо заменить его на 0, без разницы целое, дробное оно и т.д.
Добавлено @ 20:18
Исчерпывающее описание: http://www.vbnet.ru/articles/Showarticle.aspx?id=195


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Kergan
Дата 19.10.2005, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.8.2005

Репутация: 3
Всего: 5



Цитата
У этого объекта есть свойство обратиться к элементу в Гриде, как к элементу матрицы или нет?

Можно. Сначала - к столбцу, потом к ячейке. Или к строке, потом к ячейке (вроде бы так).
Можно оперировать целыми столбцами и строками.
А за мануал спасибо. У меня такойже, только на немецком smile.
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :(
PM MAIL ICQ   Вверх
Voldemar2004
Дата 19.10.2005, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Вот этот код не работает, мне надо, чтобы столбец из Grid'a (любого - Flex или Data) сохранялся в БД. smile

Код

Private Sub Command3_Click()

Data2.RecordSource = "SELECT NOM FROM DELO"
Data2.Recordset.AddNew
Data2.Recordset.Update
Data2.Refresh
TDBGrid2.Refresh

End Sub
smile

Уж скока всего перепробовал и по 2 Data-обекта все бестолку.


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Kergan
Дата 19.10.2005, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.8.2005

Репутация: 3
Всего: 5



Я бы предложил каждый раз перекопировать базу...
Т.Е. у тебя (давай на ты) есть база, которую юзер меняет непосредственно - BASA1.
Есть та, которую ты сохраняешь по клику - BASA2.
Ну, копируй по клику BASA1 в BASA2?
Ведь TDBgrid работает с базой напрямую - как Аксес, любое изменение в нем мгновенно сохраняется.
Если долго копирует можно маленький сплэш-скрин (даже без прогресс бара, просто с мелкой анимашкой и надписью) "идет обновление структуры базы".

Или ты хочешь сказать, что при работе база ВООБЩЕ не меняется?

Это сообщение отредактировал(а) Kergan - 19.10.2005, 15:03
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :(
PM MAIL ICQ   Вверх
Voldemar2004
Дата 20.10.2005, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Цитата(Kergan @ 19.10.2005, 15:01)
при работе база ВООБЩЕ не меняется?
При работе БД вообще не меняется. smile
Код

Private Sub Command3_Click()
If File1.FileName <> "" Then

Data2.DatabaseName = Dir1.Path
Data2.RecordSource = Left(File1.FileName, Len(File1.FileName) - 4)
Data2.RecordSource = "SELECT [поле 1,2,3,4] FROM DELO"
Data2.Refresh
TDBGrid2.Refresh

Else: MsgBox "Не выбран файл БД", vbInformation
End If

End Sub

Private Sub cmdSave_Click()
TDBGrid2.Update
Data2.Recordset.AddNew
Data2.Recordset.Update
End Sub


Короче я делаю так: есть TDBgrid1 и Data1 - в них отображается главная БД. И есть TDBgrid2 и Data2 - в них отображается SQL-запрос, т.е. "SELECT [поле 1,2,3,4] FROM DELO".

З.Ы. Кажется я сделал то, что требуется, но работает только все наоборот - таблица с БД правится, тока это не та таблица - а главная. Короче буду разбираться. smile Это я от усталости туплю.


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Kergan
Дата 20.10.2005, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.8.2005

Репутация: 3
Всего: 5



Если надоест разбираться, напиши поподробнее о своей проблеме и кинь базу, подолбимся вместе!
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :(
PM MAIL ICQ   Вверх
Voldemar2004
Дата 21.10.2005, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Вот код, который подсчитывает число строк в таблице, осталось сделать только переход на последнюю строчку с помощью TDBGrid2.EditActive = True. Вся фишка в следующеем: (я сам дошел до этого): считаем число строк и последнюю строку выделяем, как-будто хотим ее отредактировать, потом просто сохраняем таблицу.
smile
Код

Private Sub Command5_Click()
Dim i As Long

' Работает, только не переходит к последней строке в таблице
'Do Until i <> Data2.Recordset.RecordCount - 1
'    Data2.Recordset.MoveNext
'Loop

MsgBox "Всего записей (строк) = " & Data2.Recordset.RecordCount

TDBGrid2.EditActive = True

For i = 0 To Data2.Recordset.RecordCount - 1
    'TDBGrid2.EditActive = True
    Data2.Recordset.MoveNext
Next i

End Sub


Последняя строка не хочет быть активной. smile


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Kergan
Дата 21.10.2005, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.8.2005

Репутация: 3
Всего: 5



Я че-т не понял. Получается, изначально у тебя с БД TDBgrid НЕ соединен т.е. записи строятся простым запросом, без обратной связи. Когдя работают мои проги с гридом, они напрямую меняют базу и задача кнопы СОХРАНИТЬ сводится к копированию базы в бэкап файл. Когда грузится форма с Гридом, то бэкап файл копируется с именем рабочей базы (на случай, если юзверь че-то изменил, потом сохранил, потом опять изменил и без сохранения вышел).
Код на Form_load такой (здесь код работы с mdb):
Код

Data1.Connect = "Access"
Data1.DataBase = "INKLGraph.mdb"
Data1.RecordSource = "INKLTex"
TDBGrid1.ReBind

У TDBGrid св-во RecordSource = Data1
У Data1 св-в не менял.

Это сообщение отредактировал(а) Kergan - 21.10.2005, 14:49
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :(
PM MAIL ICQ   Вверх
Voldemar2004
Дата 23.10.2005, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Я сначала подумал, что лучше будет метод драг-н-дроп, но потом сам написал вот это:
кстати, очень богатый мануал к TrueDBGrid - может перевести его? вывалить на форум + дистрибутив smile
Код

Option Explicit
Public i As Long ' текущее значение прогресс-бара
Public DataRecCount As Long ' максимальное значение прогресс-бара

Private Sub Command1_Click()
DataRecCount = Data1.Recordset.RecordCount

For i = 0 To DataRecCount - 2
    'MsgBox TDBGrid1.SelText ' для отладки
    
    Data2.Recordset.AddNew
        Data2.Recordset.Fields(0) = TDBGrid1.SelText
    Data2.Recordset.Update

Data1.Recordset.MoveNext  ' переход к следующей строке
'Data1.Recordset.MoveLast ' переход на самую последнюю строку в столбце

'    TDBGrid2.EditActive = True ' открыть редактирование в ячейке

Next i

'Data2.Recordset.MoveLast

MsgBox "Всего записей (строк) = " & DataRecCount


End Sub

Private Sub Form_Load()
' при загрузке формы отобразим только те поля, которые нам нужны:
Data1.RecordSource = "SELECT NOM, WO, WO1, WO2 FROM DELO"
Data1.Refresh
TDBGrid1.Refresh
End Sub


мне осталось только улучшить этот код: сейчас в БД добавляется только тот столбец, который я выбрал, как сделать так, чтобы сразу вводились 4 поля: SELECT NOM, WO, WO1, WO2 FROM DELO.
smile
Код

For i = 0 To DataRecCount - 2
   
    Data2.Recordset.AddNew
        Data2.Recordset.Fields(0) = TDBGrid1.SelText
        Data2.Recordset.Fields(1) = TDBGrid1.SelText ' такой фокус не проходит...
        ' сюда добавить код
    Data2.Recordset.Update

Data1.Recordset.MoveNext  ' переход к следующей строке

Next i



--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Voldemar2004
Дата 23.10.2005, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Цитата(Voldemar2004 @ 18.10.2005, 14:16)
У меня еще проблема с этим True DBGrid'ом: в других Гридах при щелчке мышой сразу появляется номер выбранного столбца, как сделать так, чтобы юзер щелкал по заголовку столбца и сразу показывался номер столбца, а не со второго раза.
вот так:
Код

Private Sub TDBGrid1_HeadClick(ByVal ColIndex As Integer)
MsgBox "Номер выбранного столбца = " & ColIndex & " отсчет ведется от 0"
End Sub


И еще вопрос: помните в C++ Builder 5 на вкладке DataAccess (доступ к данным) есть объекты TDataSource и TTable, в VB 6/.NET есть их аналог или только Data, Adodc соответственно?

Это сообщение отредактировал(а) Voldemar2004 - 23.10.2005, 12:50


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Kergan
Дата 23.10.2005, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.8.2005

Репутация: 3
Всего: 5



Только я рекомендую ПОЛНОСТЬЮ коннект устанавливать в form_load - в том числе имя базы в data, тип соединения и самое важное - связывание data и tdbgrid. Иначе будет потом гемарой - не будет чапать на половине машин т.к. грид обратится к data РАНЬШЕ, чем data - к базе данных. Такой баг мне много крови попортил когда-то...
--------------------
Была у меня дурацкая подпись...Я ее убрал, а новую еще не придумал. :(
PM MAIL ICQ   Вверх
Voldemar2004
Дата 31.10.2005, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



У меня опять появились вопросы по DataGrid: на форме 2 ADODC (adodc1 и adodc2), DataGrid1 и DataGrid2 соответственно. RecordSource для DataGrid1 = adodc1, для DataGrid2 = adodc2 открываем файлы *.mdb в первом AdoData (вообще-то в моем случае все немного сложнее - это я для наглядности). Другую БД в во втором AdoData:
Код

' кнопка работает, но не так как надо :(
Option Explicit
Public Grid2ColSel As Long

Private Sub Command1_Click()
Dim i As Long

For i = 0 To Adodc1.Recordset.RecordCount - 1
    
    Adodc2.Recordset.AddNew
        Adodc2.Recordset.Fields(Grid2ColSel) = Val(DataGrid1.SelText)
    Adodc2.Recordset.Update
   
    Adodc1.Recordset.MoveNext
Next i

Adodc2.Recordset.MoveFirst

DataGrid1.Refresh

End Sub

' функция для подсчета строк в таблице: (вообще-то можно использовать
' встроенную функцию подсчета строк в DataGrid'a, но в моем случае я юзаю True DataBaseGrid)
' а в нем все не так просто, когда строк > 37 000
Private Function StrCount(DataControl As Adodc, Grid As DataGrid) As Long
    DataControl.Recordset.MoveLast
    StrCount = DataControl.Recordset.RecordCount
    DataControl.Recordset.MoveFirst
End Function

' щелчок по заголовку чтобы узнать номер выбранного столбца
Private Sub DataGrid2_HeadClick(ByVal ColIndex As Integer)
Grid2ColSel = ColIndex
End Sub


если нажать на кнопку проихсодит добавление выбранного столбца 1-ой таблицы в выбранный столбец 2-ой таблицы, НО: только в самый конец строк 2-ой таблицы, а НАДО, чтобы заполнение начиналось с 1-ой строки, т.е.:

сейчас работает вот так:

1-ая таблица: 2-ая таблица (1-ый столбик - ПУСТОЙ):
| 1 | 0 | 0 | | | 0 | 0 | 0 |
| 2 | 0 | 0 | | | 0 | 0 | 0 |
| 3 | 0 | 0 | | | 0 | 0 | 0 |
| 4 | 0 | 0 | | | 0 | 0 | 0 |

копирую 1-ой стоблец 1-ой таблицы в 1-ый столбец 2-ой таблицы:
получается вот это:

| 1 | 0 | 0 | | | 0 | 0 | 0 |
| 2 | 0 | 0 | | | 0 | 0 | 0 |
| 3 | 0 | 0 | | | 0 | 0 | 0 |
| 4 | 0 | 0 | | | 0 | 0 | 0 |
___________1
___________2
___________3
___________4

А требуется, чтобы было так:
| 1 | 0 | 0 | | 1 | 0 | 0 | 0 |
| 2 | 0 | 0 | | 2 | 0 | 0 | 0 |
| 3 | 0 | 0 | | 3 | 0 | 0 | 0 |
| 4 | 0 | 0 | | 4 | 0 | 0 | 0 |

Не пойму, что не так работает в моей коде. smile

Это сообщение отредактировал(а) Voldemar2004 - 31.10.2005, 21:45


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Voldemar2004
Дата 3.11.2005, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Код

data1.Recordset.RecordCount
- Нормально не считает число записей, у меня все время выдает 501, 1002 ..... и т.д.

Это у всех так? Или только у меня такая проблема? Если число записей (строк) > 1000.

Хотя я сам написал ф-цию, которая нормально работает:
Код
Private Function StrCount(DataControl As Data, Grid As TDBGrid) As Long

    DataControl.Recordset.MoveLast
    StrCount = DataControl.Recordset.RecordCount
    DataControl.Recordset.MoveFirst

End Function


И еще: не копирует первую выбранную строку из Grid1 в Grid2
Код

    For i = 0 To StrCount(Data2, TDBGrid2) - 1
        
    Data2.Recordset.MoveNext
        
        Data2.Recordset.Edit       
            
        Data1.Recordset.MoveNext
        
        Data2.Recordset.Fields(Grid2ColSel) = Val(TDBGrid1.SelText)

        Data2.Recordset.Update
    
    Next i


хотя я знаю что должно быть так:
Код

    For i = 0 To StrCount(Data2, TDBGrid2) - 1
        
    Data2.Recordset.Edit    

    Data2.Recordset.MoveNext
        
        Data1.Recordset.MoveNext
        
        Data2.Recordset.Fields(Grid2ColSel) = Val(TDBGrid1.SelText)

        Data2.Recordset.Update
    
    Next i
но тут пишет, что "нет текущей записи".




--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Voldemar2004
Дата 4.11.2005, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: 7
Всего: 23



Voldemar2004, вот исправленный код:
Код

Option Explicit
dim i as long
For i = 0 To StrCount(Data1, TDBGrid1) - 1

        Data2.Recordset.Edit
        
        ' скопировать в первый столбец второго Grid'а выбранные значения из 1-го Grid'а:
        Data2.Recordset.Fields(0) = Val(TDBGrid1.SelText) ' можно и без Val()
        
        Data2.Recordset.Update
        Data2.Recordset.MoveNext
        
        Data1.Recordset.MoveNext
   
Next i


Все работает без ошибок. Но только при условии, что число строк первого грида = или > числа строк 2-го грида. Причем я заметил, что если не делать лишних DataX.Recordset.Update (что впрочем надо для того, чтобы юзер видел, что прога работает) - копирование происходит гораздо быстрее.

Это я к тому, что если кому-нибудь понадобится, то не спотыкались на тех же граблях, что и я.
P.S. Причем Apex True DataGrid (не OLE) не требует ADO (хватит и Data)- что тоже прибавляет скорости работы.


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0739 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.