Вопрос
В каких единицах задается размер поля в Visual Data Manager? В байтах? А то я установил 100, а туда обычная строка не влазит. А что означает тип поля «Memo»? Когда установил его — все влезло.
Ответ
Размер поля — кол-во байтов в зависимости от типа поля:
date — 8 байт
byte — 1 байт
string — максимальное число символов (но не больше 255)
Memo — длинный текст (до 65535) или комбинация текста и чисел (в принципе двоичное поле). В help-е по DAO в принципе все написано.
tagir
Вопрос
Подскажите ссылочку на какой-нибудь ActiveX grid где есть возможность использовать в ячейках combobox,checkbox.
Ответ
True DBGrid от Component One умеет это делать и многое другое.
Сергей Л.
Поищи VSFlexGrid
Наметкин Андрей
Вопрос
В Delphi есть Qreport. Есть ли что-то подобное в VB?
Ответ
Да, в VB есть замечательный генератор отчетов Data Report. Для того, чтобы его добавить к проекту, нужно щелкнуть по проекту правой клавишей в окне с его структурой и выбрать Добавить -> Data Report. Еще понядобится Data Environment (добавляется также).
DedMorozzz
Вопрос
Есть строка
"' AND dbInt = " & CStr(Int), _
0, adSearchForward, 1
Которая вызывает ошибку 3001
"Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another."
Если убираю второе условие
(rs_Doc.Find "dbStr = '" & Trim$(txtStr.Text) & "'", adSearchForward, 1), то все работает, то же самое если убираю первое
(rs_Doc.Find "dbInt = " & CStr(Int), 0, adSearchForward, 1), опять все работает, а вместе не хотят.
Ответ
Вот маленькая цитата из умной книжки:
"Самый большой недостаток метода Find: он может искать соответствие только по единственному критерию. Для множества критериев вместо метода Find используется свойство Filter."
Дмитрий Данелия
Вопрос
Как в DataGrid отобразить данные определенных полей из двух таблиц (таблицы имеют связь между собой)?
Ответ
Самый простой вариант — создаешь соответствующий ADO ли DAO Recordset, пишешь SELECT, вроде:
select t1.colA, t2.colB from table1 t1 inner join table2 t2 on t1.colC=t2.colE
Полученный Dataset или Recordset привязывай к DataGrid.
Вопрос
Как в ListBox вставить содержимое базы данных, не набирая его вручную.
Ответ
Зайди в «Вид» (Project) затем выбери «Ссылки» (References), поставь крыж напротив Microsoft DAO 3.51 Object Library. Затем в форме вставь ListBox Скопируй следующий код, обращая внимание на ссылки
Private Sub Form_Load()
Dim wrk As Workspace
Dim db As Database
Dim rs As Recordset
Set wrk = CreateWorkspace("", "admin", "", dbUseJet)
Set db = wrk.OpenDatabase("Имя базы данных, с которой надо взять данные")
Set rs = db.OpenRecordset("Имя таблицы")
rs.MoveFirst
Do While rs.EOF = False
Me.List1.AddItem (rs.Fields("имя поля").Value)
rs.MoveNext
Loop
End Sub
shuric
Вопрос
У меня на форме, MSFlexGrid и кнопки премещения назад, вперед. При их нажатии бегает полосочка и выделяет записи на Гриде.
Как сделать чтобы в Гриде показывалась запись которая не видна, то есть чтобы ее увидить приходиться перемещаться полосок прокрутки, но она выделяется?
Ответ
Используй свойство TopRow.
Viaceslavas Kaleda
Вопрос
Как вести поиск по базе данных отдельного слова?
К примеру, в некоторой строке
"фывывф фыв ыф ыф ыф ввыф QWERTY лыфвд"
находится слово 'QWERTY', его и надо найти.
Ответ
Используй оператор LIKE. Например:
У тебя в БД есть поля Name, Fam, Tel и ты точно не знаешь, в каком поле находится искомая фраза "QWERTY". Создаешь критерий:
Crit = "Name like '*QWERTY*' or Fam like '*QWERTY*' or Tel like '*QWERTY*'"
Затем Data.Recordset.FindNext Crit. Все! Это простейший способ, но идея такая.
DedMorozzz
Вопрос
Как вызвать отчет из VB6?
Старого контрола "Crystal Report Control" в девятой версии нет, зато куча новых.
Где можно почитать про Crystal Report 9?
Ответ
Для показа отчета используй контрол CRViewer9…
Кодик примерно такой:
Dim crApplication As New CRAXDDRT.Application
Dim crReport As CRAXDDRT.Report
Dim strReportPath As String
strReportPath = "C:\Development\C1\Resources\Report1.rpt"
Set crReport = crApplication.OpenReport(strReportPath, 1)CRViewer.ReportSource = crReport
CRViewer.ViewReport
Вопрос
Как делается запрос на update field'a?
Ответ
UPDATE Table1 SET Field1='bla', Field2='bla-bla' [WHERE
Field3='bla-bla-bla']
Viaceslavas Kaleda
Вопрос
Версия VB:6.0
На форме имеются элементы Data и ListBox. Data связан с таблицей. Требуется занести данные таблицы в ListBox. (заносятся фамилии пользователей программы).
Может что не правильно делаю, используя эти два элемента в паре. В книгах ответа не нашел.
Ответ
К сожалению ListBox не предназначен для непосредственной работы с элементом Data, даже если ты и выставляешь ему соответствующие свойства DataSource и DataField.
Поэтому, если тебе необходим обязательно ListBox, то его придется заполнить вручную:
Private Sub Form_Initialize()
Только посмотри какое именно поле тебе нужно отражать, т.к. Recordset содержит на самом деле все поля выбранной таблицы. Но заполнить — это не сложно. Но, очевидно, тебе будет необходимо сделать и синхронизацию перемещения по записям. Т.е., если ты просто заполнишь ListBox и после этого будешь нажимать на стрелки элемента Data — в ListBox-е не будет происходить перемещения, и наоборот — перемещаясь по строкам в ListBox — ты не вызовешь перемещения указателя записей. Это уже дополнительные сложности, хотя тоже, конечно, можно сделать.
With Data1.Recordset
Do Until .EOF
List1.AddItem .Fields(0).Value
.MoveNext
Loop
.MoveFirst
List1.ListIndex = 0
End With
End Sub
Только все это ни к чему — ведь есть специальные элементы управления, предназначенные именно для отображения данных из Баз Данных. Их и используй. Самый простой для элемента Data — это Microsoft Data Bound Grid Control 5.0 (SP3). Задаешь ему свойство Dat aSource-Data1 и все = ты имеешь заполненную полями таблицу, полностью синхронизированную с БД, непосредственно в которой ты можешь и корректировать записи, и добавлять, и удалять.
Из конференции Expert_FAQ
Вопрос
С помощью DAO запускаю запрос на создание таблицы в mdb-бишной базе и все бы ничего, да только база была открыта естественно до выполнения запроса и в коллекции tabledefs новую созданную запросом таблицу не видно (причем свойство «updatable» для mdb-шной базы возвращает «true»).
Есть ли какой — нибудь способ запустить update или refresh или еще что после выполнения запроса?
Ответ
mydatabase.TableDefs.Refresh
Alex Juice
Вопрос
Как конвертировать базу формата Access в SQL?
Ответ
В программе MSAccess это можно сделать:
Сервис — Служебные программы — Мастер преобразования в формат SQL.
Артем Кривокрисенко
Вопрос
'Создаю через ADODB соединение с базой.
Dim cn As New ADODB.Connection
Dim KLSN As New ADODB.Recordset
' далее открываю
cn.Open "Provider=…"
KLSN .Open sqlstr, cn, adOpenDynamic, adLockOptimistic
…
' и закрываю
KLSN.Close
Если далее опять попадется KLSN.Close — выдает ошибку (та же история с KLSN .Open). Как мне программно определить, открыт Recordset или закрыт?
Ответ
If RS.State>0 Then RS.Close
Viaceslavas Kaleda
Вопрос
После изменения данных в ADO, подключенного к базе данных в Access, и update'a, как определить, произошла ли физическая запись данных на диск? Проблема в том, что если тут же использовать такой же запрос из другого ADO, то приходят старые данные. А обновленные — со значительной задержкой по времени.
Кто-нибудь сталкивался с такой проблемой?
Ответ
В качестве ответа на этот вопрос привожу цитату из книги «Разработка приложений на MS VB6. Учебный курс». Может быть поможет.
Цитата:
Статический и последовательный курсоры предоставляют набор записей в том состоянии, в каком он был на момент его формирования. Для получения обновленных записей текущего набора применяйте метод Resync объекта Recordset. Однако этот метод не возвращает новые записи, соответствующие критериям исходного запроса. Чтобы получить новые записи, придется вызвать метод Requery, а он потребует дополнительных ресурсов, так как запрос будет выполнен заново.
Игорь
Вопрос
Mdb-шная база запаролена нужно открыть командой set:
set db = DbEngine.OpenDataBase("MyDB.mdb")
Ответ
Что-то вроде:
OpenDataBase ("MyDB.mdb", dblangcyrillic & ";pwd=__ПАРОЛЬ__")
[Алексей]
Вопрос
Как отправить готовый отчет из Access или Excel по почте (адрес всегда один и тот же)?
Ответ
Для отправки книги Excel по Email пользуюсь функцией:
Application.Dialogs(xlDialogSendMail).Show ("adress@yahoo.com")
Но при этом адрес получателя должен быть также записан в адресную книгу.
Сергей
Вопрос
Как передать параметры в отчет Cristal Reports, используя crpe32.dll?
Ответ
Вообще-то, я предпочитаю использовать SelectionFormula, мне так больше нравится. Но если говорить о параметрах, то это будет выглядеть приблизительно так:
CR.ParameterFields(0) = "StartDate;DateTime(2001,08,20,0,0,0);TRUE"
CR.ParameterFields(1) = "EndDate;DateTime(2001,08,27,23,59,59);TRUE"
В данном примере CR — имя контрола Создается семейство параметров, каждому из которых присваивается строковое выражение, состоящее из трех частей: имя параметра, значение и флаг обновления (ставим всегда в TRUE). В примере оба параметра являются датами, поэтому для их формирования применена функция DateTime (это функция кристала, а не бэйсика). В качестве второй части передаваемой строки может быть использовано все, что написано на языке самого кристала.
Sergey Y. Tkachev
Вопрос
Есть БД Access. Из таблицы Tabl необходимо получить внешним модулем на VB5 произвольную запись с некоторым номером, для дальнейшей обработки. Как это сделать?
Ответ
Попробуй открывать Recordset в Visual Basic, а потом воспользоваться свойством AbsolutePosition (речь идет про ADODB.Recordset). Можешь перемещаться на запись с конкретным номером, ну а сам конкретный номер можешь генерировать случайным образом.
Sergey Y. Tkachev
Вопрос
Я подключаюсь к базе данных .mdb, используя ADODB. Одно из полей "word" таблицы "Catalog" содержит данные типа OLE-объект. Там находятся файлы *.doc. Каким образом я смогу получить их содержимое (хотя бы добраться до Object.Words.Item(#).Text)?
Ответ
Посмотри по этому адресу:
http://vbnet.ru/faq/showtopic.asp?id=133
Н. Шувалов
Вопрос
Возникла ситуация: необходимо програмно получить список всех баз в SQL Servere (исп. 2000 и 7). Как это сделать?
Ответ
SELECT *FROM master.dbo.sysdatabases
Vladimir Petrov
Вопрос
Как програмно поменять заголовок (label) в Crystal Report 9?
Ответ
Описываю ситуацию…
Имею отчет в Кристале. В секции ReportHeader поставлен один TextObject в котором написано название отчета…
Задача понятна — изменить программно :)
Делаю следующее:
Dim repTextObject As CRAXDRT.TextObject
Set repTextObject = crReport.Sections("RH").ReportObjects(1)
repTextObject.SetText "Crystal Report"
Вроде работает…
Вопрос
Как програмно создавать базы данных .DBF формата 3 или 4?
Ответ
Вот как создать DBF-файл. Просто вызовите процедуру CreateDBF и в качестве первого параметра укажите имя файла, а в качестве второго параметра имя, длину и тип полей, например:
CreateDBF("C:\Temp\base.dbf", "NAME-C-20|NUM-N-5|DATE-D|FLAG-L|MEMO-M|"
В этом примере будет создан DBF-файл с полями: NAME, NUM, DATE, FLAG и MEMO. Тип C — string, N — integer, D — date, L — boolean, M — memo. Т.е. формат такой:
ИМЯ_ПОЛЯ-ТИП_ПОЛЯ-ДЛИНА_ПОЛЯ.
Option Explicit
Public Sub CreateDBF(FileName As String, Fields As String)
Dim FileNum As Integer
Dim FieldName As String
Dim FieldPos As Integer
Dim FieldsCount As Integer
Dim Field As String
Dim Sym As String * 1
Dim Pos As Long
Dim i As Integer
Dim B As Byte
Dim S As String
Dim L As Integer
FileNum = FreeFile
Open FileName For Output As FileNum
Close #FileNum
FileNum = FreeFile
Open FileName For Binary As FileNum
L = 0
Do While True
L = InStr(L + 1, Fields, "|")
If L = 0 Then Exit Do
FieldsCount = FieldsCount + 1
Loop
If Right(Fields, 1) <> "|" Then Fields = Fields + "|"
If FieldsCount > 255 Then FieldsCount = 255
S = String((B + 1) * 32, Chr(0))
Put #FileNum, 1, S
FieldPos = 1
L = 0
For i = 1 To FieldsCount
Pos = i * 32 + 1
Fields = Mid(Fields, L + 1)
L = InStr(1, Fields, "|")
S = Left(Fields, L — 1)
B = InStr(1, S, "-")
If B = 0 Then Exit For
FieldName = Left(S, B — 1)
Sym = UCase(Mid(S, B + 1, 1))
Select Case Sym
Case "C", "N"
B = InStr(B + 1, S, "-")
B = Val(Mid(Fields, B + 1))
If B = 0 Then Exit For
Case "D"
B = 8
Case "L"
B = 1
Case "M"
B = 10
Case Else
Exit For
End Select
Put #FileNum, Pos, FieldName
Put #FileNum, Pos + 11, Sym
Put #FileNum, , FieldPos
Put #FileNum, Pos + 16, B
FieldPos = FieldPos + B
Next
If i < FieldsCount + 1 Then
MsgBox "I?eia?u caaaiey iiey:" + Chr(13) + Chr(13) + _
" NAME-C-20|" + Chr(13) + _
" NUM-N-5|" + Chr(13) + _
" DATE-D|" + Chr(13) + _
" FLAG-L|" + Chr(13) + _
" MEMO-M|", _
vbExclamation, "Ioeaea i?e caaaiee iiey" + Str(i)
Exit Sub
End If
Put #FileNum, 11, FieldPos
B = 3
Put #FileNum, 1, B
B = Year(Now) Mod 100
Put #FileNum, , B
B = Month(Now)
Put #FileNum, , B
B = Day(Now)
Put #FileNum, , B
L = (FieldsCount + 1) * 32 + 1
Put #FileNum, 9, L
B = 13
Put #FileNum, L, B
Close #FileNum
End Sub
Rutshtein Alex
Вопрос
Как связать поле типа OLE с объектом OLE на форме? Можно ли использовать word и html одновременно?
Ответ
Размести на форме 2 OLE-объекта(в первом (OLE1) не помещай никакого объекта, а во втором (OLE2) объект MSWord). Пять кнопок (первая (cmdNew) будет создавать БД с полем типа OLE, вторая (command1) — переносить данные из OLE2 в OLE1, третья (command2(0)) — "добавить новою запись", четвертая (command2(1)) — "Сохранить изменения"), пятая (command2(2)) — "Удалить запись") и, для удобства, стандартный объект VB6 — Data (пусть имя остается по умолчанию — "Data1"). Далее не забудь указать в Project->References ссылку на Microsoft DAO 2.5/3.5 Compatibility Library.
Теперь впиши код в форму:
Private Sub cmdNew_Click()
Dim NewDB As Database
Dim NewWs As Workspace
Dim NewTbl As TableDef
Dim F1 As DAO.Field
Set NewWs = DBEngine.Workspaces(0)
Set NewDB = NewWs.CreateDatabase("ПУТЬ_К_БАЗЕ_ДАННЫХ", dbLangGeneral)
Set NewTbl = NewDB.CreateTableDef("QWERTY")
Set F1 = NewTbl.CreateField("ASD", dbLongBinary) 'OLE-объект
NewTbl.Fields.Append F1
Set F1 = Nothing 'освобождаем память
NewDB.TableDefs.Append NewTbl
NewDB.Close
NewWs.Close
Set NewDB = Nothing 'освобождаем память
Set NewWs = Nothing 'освобождаем память
Set NewTbl = Nothing 'освобождаем память
Data1.DatabaseName = "ПУТЬ_К_БАЗЕ_ДАННЫХ"
Data1.Connect = dbLangGeneral
Data1.RecordSource = "QWERTY"
Data1.Refresh
Data1.Recordset.AddNew
' в результате у тебя будет создана БД с таблицей QWERTY и полем _
с типом данных OLE — ASD
end sub
Private sub command2_click(index as integer)
Select Case Index
Case 0
Data1.Recordset.AddNew
Case 1
Data1.UpdateRecord
Data1.Recordset.Bookmark = Data1.Recordset.LastModified
Case 2
With Data1.Recordset
.Delete
.MoveNext
If .EOF Then .MoveLast
End With
End Select
end sub
Private Sub Data1_Reposition()
data1.Caption = "Запись № " & Data1.Recordset.AbsolutePosition + 1
End Sub
Ревягин_Алексей
Вопрос
Народ, подскадите, пожалуйста: при открытии формы задается Recordset, зараннее объявленный public, однако в других процедурах его не видно. Как сделать Recordset, который объявлен на уровне модуля и к которому можно обратиться из других процедур?
Ответ
Объявляешь в разделе Declaration формы:
PRIVATE DB as database
PRIVATE RS as Recordset
Private Sub Form_Load ()
set DB = DbEngine.OpenDataBase ("MyBase.mdb")
set RS = db.OpenRecordset("SELECT *FROM MyTable",dbopenforwardonly)
End Sub
и все, во всех процедурах данной формы Recordset будет виден.
P.S. не забудь его закрыть при выгрузке формы:
Sub Form_QueryUnload (Cancel As Integer, UnloadMode As Integer)
rs.close
set rs = nothing
db.close
set db = nothing
end sub
Сергей Л.
Вопрос
У меня есть файлы messages.mdb в каждой папке В каждом таком файле есть таблица Messages, в которой хранятся сами письма. Мне нужно скопировать одну запись из одного файла в другой. Как это сделать? Пытался сделать так:
Dim tMessageID$
tMessageID = lstMessages.SelectedItem.Key
Dim cn2 As ADODB.Connection
Dim rs2 As ADODB.Recordset
Set cn2 = New ADODB.Connection
Set rs2 = New ADODB.Recordset
cn2.ConnectionString = "Driver=Microsoft Access Driver (*.mdb);Password=:UserID=Admin;DBQ=" & App.Path & "\" & SelectedBox & "\trash\messages.mdb"
rs2.ActiveConnection = cn.ConnectionString
rs2.CursorType = adOpenDynamic
sSQL = "SELECT * FROM Messages AS DelMsg WHERE MessageID='" & tMessageID & "'"
'Вот тут ввожу псевдоним, но дольше его не видно
rs.Source = sSQL
rs.Open
sSQL = "INSERT INTO Messages SELECT * FROM DelMsg WHERE MessageID='" & tMessageID & "'"
'Тут его вставляю
rs2.Source = sSQL
rs2.Open
'Здесь выдает, что не найдена входная таблица DelMsg
rs2.Close
rs.Close
Ответ
Вставляем из 'c:\temp\111.mdb' в 'c:\temp\aa.mdb'.
sSQL="INSERT INTO Messages IN 'c:\temp\222.mdb' SELECT * FROM Messages IN 'c:\temp\111.mdb' where MessageID='" & tMessageID & "'"
tagir
Вопрос
У меня есть файлы messages.mdb в каждой папке В каждом таком файле есть таблица Messages, в которой хранятся сами письма. Мне нужно скопировать одну запись из одного файла в другой. Как это сделать?
Пытался сделать так:
Dim tMessageID$
tMessageID = lstMessages.SelectedItem.Key
Dim cn2 As ADODB.Connection
Dim rs2 As ADODB.Recordset
Set cn2 = New ADODB.Connection
Set rs2 = New ADODB.Recordset
cn2.ConnectionString = "Driver=Microsoft Access Driver (*.mdb);Password=:UserID=Admin;DBQ=" & App.Path & "\" & SelectedBox & "\trash\messages.mdb"
rs2.ActiveConnection = cn.ConnectionString
rs2.CursorType = adOpenDynamic
'Вот тут ввожу псевдоним но дольше его не видно
sSQL = "SELECT * FROM Messages AS DelMsg WHERE MessageID='" & tMessageID & "'"
rs.Source = sSQL
rs.Open
'Тут его вставляю.
sSQL = "INSERT INTO Messages SELECT * FROM DelMsg WHERE MessageID='" & tMessageID & "'"
rs2.Source = sSQL
rs2.Open
Здесь выдает, что не найдена входная таблица DelMsg :(
rs2.Close
rs.Close
Ответ
Вставляем из 'c:\temp\111.mdb' в 'c:\temp\aa.mdb'
sSQL="INSERT INTO Messages IN 'c:\temp\222.mdb' SELECT * FROM Messages IN 'c:\temp\111.mdb' where MessageID='" & tMessageID & "'"
tagir
Вопрос
Как считать данные из файлов dbf с помощью ADO?
Ответ
Код помещает данные из таблицы d:\region.dbf в Recordset rs.
Option Explicit
Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Private Sub Command1_Click()
Dim strSql As String
cnn.Open "Driver={Microsoft Visual FoxPro Driver};" & _
"SourceType=DBF;" & _
"SourceDB= d:\a;" & _
"Exclusive=Yes;"
strSql = "select * from region"
rs.Open strSql, cnn, adOpenDynamic, adLockBatchOptimistic, adCmdText
End Sub
Alexey_Naichuk
Вопрос
Имеются две таблицы, связанные по коду клиента: таблица1 и таблица2. Нужно удалить все записи по клиентам из таблицы1, которые имеются в таблице2. Каким запросом это сделать?
Ответ
DELETE FROM table1 WHERE clientID IN (SELECT ClientID FROM table2)
Shemyakin, Dmitry
Вопрос
Какого надо выбирать провайдера, чтобы, например к ADO-контролу подключать dbf-файлы. Что-то у меня ни с каким не получается.
Ответ
Все просто. В провайдере указывается путь к каталогу. Даже если установить его как, например:
"C:\blabla\dbf\myfile.dbf" система адо не будет использовать это имя файла для нее все равно будет
C:\blabla\dbf\, то есть для запросов становятся доступны все файлы в этом каталоге. Это как открытие mdb файла. То есть аналогия каталог это база mdb а файлы в каталоге как таблицы в нем.
Запрос пишешь следующим образом
SELECT * FROM myfile.dbf
Вызов будет следующий.
Dim rs as ADODB.Recordset
Dim objDbf as CDbf 'объявим экземпляр класса
Set objDbf = New CDbf 'создадим объект
objDbf.FilePath = "C:\blabla\dbf\" ' установим активный каталог для провайдера адо
Set rs = objDbf.GetData("SELECT * FROM myfile.dbf") ' Получим рекордсет
Set objDbf = Nothing 'уничтожим объект
Igor
Вопрос
Работа с базой данных.
Расклад такой:
Таблица — "А"
Поля — "Дата Продажи"
"Наименование Товара"
"Стоимость"
Как должен выглядеть SQL запрос чтобы вывести данные о количестве записей из поля "Наименование Товара", общей суммы из поля "Стоимость" на конкретную дату "Дата Продажи" из таблицы "А". Причем должна быть возможность делать выборку на дату задаваемую пользователем,в отдельном Text.Box. Пример: 17.03.02 было проданно 15 наименований товара на сумму 1500 рублей.
"VB 6.0" ,база данных "ACCESS" , контрол "DATA"
Ответ
"SELECT Count([Наименование товара]) AS ItemsCount, Sum([Стоимость]) AS ItemsTotal FROM [А] WHERE [Дата продажи] = " & Str(CLng(Cdbl(txtDate.Text)))
Только смотри аккуратно. Дата продажи должна быть действительно датой, а не датой со временем. Если у тебя это не соблюдается, то лучше используй BETWEEN в условии WHERE
"SELECT Count([Наименование товара]) AS ItemsCount, Sum([Стоимость]) AS ItemsTotal FROM [А] WHERE [Дата продажи] BETWEEN " & Str(CLng(Cdbl(txtDate.Text))) & " AND " & Str(CLng(Cdbl(txtDate.Text))+1)
Sergey Y. Tkachev
Вопрос
Вопрос такой: имется data control можноли в полное мере использоват SQL запросы (delete, update, create, и т.д.).
Ответ
Data1.database.execute "DELETE FROM MyTable" и т.д…
Сергей Л.
Вопрос
Можно ли работать в VB с БД MySql так же как с Access?
Если да, то что для этого надо?
Ответ
Однозначно можно. Через ODBC.
Для этого понадобится библиотечка MyODBC.
Найти ее можно на www.mysql.com Там есть инструкция по установке и использованию. Все что потребуется — это создать источник и использовать его как и любой другой. Под ADO проблем у меня не возникало. Если тебе хочется иметь какую-то среду для разработки табличек и выполнения запросов, то на том же сайте можно найти GUI для MySQL. Называется она MyControlCenter (вроде бы так). Естественно, это все бесплатно.
Мне больше нравится другая программка:
http://www.anse.de/mysqlfront.
У нее и функций побольше, и удобство повыше.
Sergey Y. Tkachev
Вопрос
Пишу:
dim dbspr As ADODB.Connection
Set dbspr = New Connection
dbspr.CursorLocation = adUseClient
dbspr.Open "PROVIDER=Microsoft.Jet." _
& "OLEDB.4.0;Data Source=..\Exam.mdb;Pwd=000;"
А оно выдает ошибку "Невозможно найти установленный IASM"
Кто знает, как открыть базу без проблем?
Ответ
Нужно указывать логин и файл рабочей группы.
Качанюк Александр
Вопрос
Подскажите как получить список SQL Server-ов в сети.
Ответ
"C:\Program Files\Microsoft SQL Server\80\Tools\DevTools\Samples\sqldmo\vb\CreateDatabase\"
frmSQLServersLogin.frm
Private Sub Form_Load()
Dim i As Integer
'Use the SQL DMO Application Object to find the available SQL Servers
Set oSQLServerDMOApp = New SQLDMO.Application
'Don't show events
gShowServerEvents = False
Dim namX As NameList
Set namX = oSQLServerDMOApp.ListAvailableSQLServers
For i = 1 To namX.Count
txtServer.AddItem namX.Item(i)
Next
'Show top server
txtServer.ListIndex = 0
End Sub
Vladimir Petrov
Вопрос
Для того, что бы иметь доступ к базе данных, сотворенной в Microsoft Access 97, минуя объект Data, я использовал вот такой код:
strDBName = App.Path & "\Data\" & "Pr_01.mdb"
strRSTable = "TblStart_Exit"
Psw_Pr=""
Set wsTmp = DBEngine.Workspaces(0)
Set dbTmp = wsTmp.OpenDatabase(strDBName, False, False, "MS Access;pwd=" & Psw_Pr)
Set rsTmp = dbTmp.OpenRecordset(strRSTable, dbOpenDynaset)
With rsTmp
.AddNew
!User = Name_User
!Date_st = Date
!Time_st = Time
.Update
End With
…
Все это прекрасно работало до того момента, когда я решил базу Pr_01.mdb конвертировать в формат Microsoft Access 2000. И вот теперь при использовании VB 6.0, программа пишет что базу открыть она уже не может, так как формат-то неизвестный какой-то. Как открыть эту базу в формате Microsoft Access 2000?
Ответ
Нужно подключить в Project|References библиотеку DAO 3.6.
Павел Сурменок
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
With cn
'Если база 2000, то провайдер такой:
.Provider = "Microsoft.Jet.OLEDB.4.0"
'а если база 97, то можно использовать и более старый провайдер:
'.Provider = "Microsoft.Jet.OLEDB.3.51"
'указываем путь к базе
.ConnectionString = "C:\pr_01.mdb"
'открываем
.Open
End With
alexeyaa2002
Вопрос
Открываю базу с помощью DAO:
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
Set db = DAO.OpenDatabase(App.Path & "\apiguide.mdb") _
strSQL = "SELECT * FROM Groups WHERE parentID=0;"
Set rs = db.OpenRecordset(strSQL)
rs.MoveFirst
Дальше начинаю считывать записи.
Так вот. Как только я открыл рекордсет, rs.RecordCount равен единице, хотя на самом деле записей около десятка. Что делать?
Ответ
Свойство RecordCount показывает не сколько всего записей у данного рекордсета, а сколько записей было обработанно. При инициализации и возврате рекордсета, объект ДАО не знает, сколько записей ему вернул сервер (точно знает о существовании только одной — самой первой записи, на которую и устанавливает курсор). Свойство MoveLast заставляет ДАО обработать все записи в рекордсете, от чего и свойство RecordCount устанавливается равным числу етих записей.
Что касается АДО, то там это «лечится» установкой свойства
RS.CursorLocation = adUseClient
перед откытием рекордсета.
Viaceslavas Kaleda
А можно выполнить дополнительный запрос:
DIM DB as DataBase
Сергей Л.
DIM RS as Recordset
Set DB = DBEngine.OpenDatabase("MyBase.mdb")
Set RS = Db.OpenRecordset("SELECT COUNT(*) as RecCount " & _
"FROM MyTable",dbopenforwardonly)
Затем получаешь:
rCount = RS!RecCount
Copyright 2000-2004 Сообщество Чайников
Контактная информация