Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Что выбрать FlexGrid or DataGrid?


Автор: Гость_Voldemar2004 23.9.2005, 13:35
Если не известно число полей в БД, то как открыть с помощью FlexGrid или DataGrid + MS ADO Control файл *.dbf.

И как избавиться от гемморра с Пуск-Администратор-....>Пользовательский DSN (создать драйвер)чтобы сразу выбирался правильный драйвер для FoxPro.

Автор: Akina 23.9.2005, 14:10
А добавь на форму компонент Data, установи необходимые параметры, и сделай его источником данных грида.

Автор: Гость_Voldemar2004 23.9.2005, 14:45
А можно сделать подмену ДОС-символов 866 на win-1251 по принципу: открываю файл считываю его посимвольно (do until eof() .... eof() ) в массив (стрингового типа) и сравниваем: если символ имеет ДОС-кодировку, то заменяем этот символ на win-кодировку с помощью ф-ции OemToChar, ну и делаем это до конца файла. Вот так, причем если в ДОС-кодировке Латиница, то ее заменять не надо.

Не знаю, что лучше - когда весь файл *.dbf преобразуешь по вышеописанному принципу, или все-таки возня с Флекс-гридом. smile

Автор: Akina 23.9.2005, 14:48
А почему посимвольно? конверти сразу всю строку...

Что-то походу ты себе лишнего геморроя ищешь... или что-то недоговариваешь.

Автор: Gannibal 23.9.2005, 14:52
незнаю я вот пользуюсь ФлексГридом smile записи в него добовляю с помощью следуещего кода незабудь подлкючить библиотеку DAO

Код

Dim Db As Database
Dim Rst As Recordset
Dim intCount As Long
Dim i As Long

Set Db = OpenDatabase(App.Path & "\databaze\knihy.mdb")
Set Rst = Db.OpenRecordset("SELECT * FROM knihy ORDER BY Prijmeni ASC")

intCount = Rst.RecordCount
Rst.MoveFirst

For i = 0 To intCount - 1
  flxKnihy.AddItem Rst.Fields("ID") & vbTab & Rst.Fields("Prijmeni") _
  & vbTab & Rst.Fields("Jmeno") & vbTab & Rst.Fields("Dilo") _
  & vbTab & Rst.Fields("Zanr") & vbTab & Rst.Fields("Rok") & vbTab & Rst.Fields("Nakladatelstvi")
  Rst.MoveNext
Next i


вот ещё один способ записи похожий

Код

On Error GoTo dbError

flxKnihy.Rows = 1

Rst.MoveLast
dbStart:
  flxKnihy.AddItem Rst.Fields("ID") & vbTab & Rst.Fields("Prijmeni") _
  & vbTab & Rst.Fields("Jmeno") & vbTab & Rst.Fields("Dilo") _
  & vbTab & Rst.Fields("Zanr") & vbTab & Rst.Fields("Rok") & vbTab & Rst.Fields("Nakladatelstvi")
Rst.MovePrevious
GoTo dbStart
Exit Sub

dbError:


первы способ быстрее чем второй потомучто он неделает запросы в базе даных на каждое поле.. сразу записывает.. ето всётаки для Аццесса smile но думаю на ФохПро можно будет переделать без проблем smile

Автор: Guest 23.9.2005, 15:37
Цитата(Akina @ 23.9.2005, 14:48)
А почему посимвольно? конверти сразу всю строку...

Что-то походу ты себе лишнего геморроя ищешь... или что-то недоговариваешь.


Цитата(M @ 23.9.2005, 14:52)
первы способ быстрее чем второй потомучто он неделает запросы в базе даных на каждое поле.. сразу записывает.. ето всётаки для Аццесса  но думаю на ФохПро можно будет переделать без проблем 


Вот я и думаю, как это переделать для ФоксПро (еще Досовский) без лишних заморочек. Потому что посмотрел на структуру файла.... А так в общем была такая задачка - дан текстовый файл, каждая запись в которой разделена символом амперсанда & , что означает - новая запись в поле, ну так ведь экспортировать довольно просто в Access VBA - там просто выбираешь символ разделения соответсвенный. коряво объяснил

Код
Set Rst = Db.OpenRecordset("SELECT * FROM knihy ORDER BY Prijmeni ASC")
Можно в несколько КомбоБокс воткнуть шаблонные операторы Эскуэля Select, From, Oredr By, чтобы юзеры сами выбирали, чего они хотят запросить.

Автор: Gannibal 23.9.2005, 20:33
Цитата(Guest @ 23.9.2005, 14:37)


Можно в несколько КомбоБокс воткнуть шаблонные операторы Эскуэля Select, From, Oredr By, чтобы юзеры сами выбирали, чего они хотят запросить


сделать то так можно это без проблем я тоже так делал ну тока с поиском мне запрос надо было созддать и каким способом потом сортировать.. http://forum.vingrad.ru/index.php?showtopic=63953

Автор: Guest 24.9.2005, 17:57
Накиньте инфы (можно ссылку) по ФлексГриду. Ну и какие манипуляции с ним можно делать (удалять, записывать программным способом). Всем + , кто накинет (только добросовестно, а не 2 слова и пара строк). Обещаю. smile


M.E.G.U.S, я купил книгу, в которой рассказывается, как создавать собственные dll-ки со множеством функций по типу: поиск, сортировка, упорядочение, нормализация.... и т.д. Просто такие dll-ки очень удобны в последующих проектах, чем в одну кучу лепить каждый раз множество функций.
Книга называется "Программирование Баз Данных на VB 5. Авторы: Майкл Амундсен, Кэртис Смит. Издательство "Бином" + CD с лицензионными проектами и демонстрационными БД.

Автор: Voldemar2004 24.9.2005, 18:00
Как сохранить в *.dbf-файл таблицу FlexGrid'a.

Автор: Gannibal 24.9.2005, 22:48
инфы хочешь, читай, может помогу smile

http://hrestomvb.h11.ru/articl/db/wse_stati/flexgrid.php
http://www.sql.ru/forum/actualtopics.aspx?search=flexgrid&submit=%CD%E0%E9%F2%E8&bid=22

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

если так взять по мне ФлексГрид (ФГ) работает как таблица в Екцеле smile переход по Ячейкам... ставить события и получать данные из данной ячейки пройти все ячейки получить данные и поставить запис в базу данных например тот же способ как я показывал выше запись в ФГ так же реализовать запис в БД.. почему бы и неть.. можно брать по строчно можно по ячейкам

сам толком сказать и немогу.. тоже недавно загорелось ФГ употреблять так пришлось копать от и до .. но всё равно всех нюансов незнаю smile

посмотри ещё здесь нащёт ДБФ smile http://www.sql.ru/forum/actualtopics.aspx?search=dbf&submit=%CD%E0%E9%F2%E8&bid=22

Автор: Gannibal 24.9.2005, 23:10
сейчас ссылочку кину на ФГ.. закачиваю фаил просто токо он чёто многовато весит smile

а вот и ссылочка http://rapidshare.de/files/5490212/FlexGrid.rar.html

Автор: Voldemar2004 25.9.2005, 10:10
M.E.G.U.S, + smile Ох, много читать придется smile . Но это то, что надо smile .

У ДатаГрид такие же свойства, как и у ФлексГрида , класс-предок ведь один - Грид. Я так понял Флекс используется, когда надо открыть таблицу с неизвестным числом полей. А ДатаГрид - уже намертво привязан к конкретному файлу БД.

Автор: Voldemar2004 25.9.2005, 12:16
У меня опять проблема: на форме находится: Adodc1, MSHFlexGrid1.
Имеется некий файл DataBase.mdb в нем база данных например 'Персонал'.

Код

Option Explicit

Private Sub Command1_Click()
Dim DB As Database
Dim Rst As Recordset

If File1.FileName = "" Then
    MsgBox "Выберите файл *.mdb", vbInformation, "Сообщение"
    Else: MsgBox Left(File1.FileName, Len(File1.FileName) - 4) ' это для отладки

Dim sState As String
Dim sSQL As String

sSQL = Text1.Text '"SELECT * FROM Персонал WHERE ИМЯ = 'ИмяСотрудника'"

Adodc1.CommandType = adCmdText

Adodc1.RecordSource = sSQL
Adodc1.Refresh

MSHFlexGrid1.Refresh

End If

End Sub

Private Sub Dir1_Change()
File1.FileName = Dir1.Path
End Sub

Private Sub Drive1_Change()
On Error GoTo Err68
    
    Dir1.Path = Drive1.Drive

Err68: If Err.Number = 68 Then MsgBox "Диск не готов для чтения", vbCritical, "Ошибка"
End Sub


Вопрос такой: как можно сделать подключение таблицы во время работы программы, а не во время разработки. Файл, который требуется подключить юзер выбирает в FileListBox. Просто у меня все время вылетает ошибка на строке Adodc1.Refresh. smile

Автор: Gannibal 25.9.2005, 13:22
кде у тебя запрос идёт


Цитата(Voldemar2004 @ 25.9.2005, 11:16)
sSQL = Text1.Text '"SELECT * FROM Персонал WHERE ИМЯ = 'ИмяСотрудника'"


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

Код

Set Db = OpenDatabase(App.Path & "\databaze\knihy.mdb")


птом после него запрос.. можешь обойтись и без рефреша в начале выполнения можешь поставить flxKnihy.Rows = 1 где
flxKnihy это название ФлексГрида

......теперь я незнаю если я тебя правельно понял то что ты хочешь сделать......

Автор: Gannibal 25.9.2005, 13:56
вот ещё ссылочка может пригоиться smile http://www.codenet.ru/progr/vbasic/vb_db/

Автор: Gannibal 25.9.2005, 14:23
я здесь книжку нашёл может будет интерестно выложил её в топик http://forum.vingrad.ru/index.php?showtopic=52693 как раз я тебе вчера из неё посылал вырезки о ФГ

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)