Delphi Posted March 19, 2007 Report Share Posted March 19, 2007 (edited) Здраствуйте работаю в аксесе и возникла такая необходимость написать програмку на бейсике в принципе ничего сложного только одно но адо выполнять запросы sql а как это сделать пока не нашол уже полтора часа мучаюсь нашол два варианта QueryDef но как написано он работает с запросами которые уже есть в базе данных а мне надо програмно генерировать запросы(просто суть работы идет в сравнении,а это лутче как мне кажеться запросами делать) и второй способ это Command хотел с ним попробовать но вообще ничего не понял. Как вы можете посоветовать выполнять запросы в бейсике. Если не сложно приведите пример или дайте ссылку P.S. подобных тем я не нашол Edited March 19, 2007 by Delphi Link to comment Share on other sites More sharing options...
yuriks Posted March 19, 2007 Report Share Posted March 19, 2007 Я использую QueryTable Создать запрос Private Sub MakeQuery()Call MQuery(Range("A1"), "test")End SubPrivate Sub MQuery(Dest As Range, QN As String)Dim ConnectionString As StringDim SQLString As StringConnectionString = "ODBC;DSN=Oracle;" + _ "Server=<имя базы>;"SQLString = "select ..."With ActiveSheet.QueryTables.Add( _ Connection:=ConnectionString, _ Destination:=Dest, _ Sql:=SQLString) .FieldNames = False .RefreshStyle = xlInsertDeleteCells .RowNumbers = False .FillAdjacentFormulas = False .RefreshOnFileOpen = False .HasAutoFormat = False .BackgroundQuery = False .TablesOnlyFromHTML = True .SavePassword = False .SaveData = True .Name = QN .RefreshEnd WithEnd Sub Обновить запрос Public Const FullApplicationName = "ExcelQuery"Public ErrorSub As StringPublic ErrorMsg As StringPublic Function RQuery(SheetName As String, Query As String, SqlText As String) As BooleanOn Error GoTo ErrorLabelApplication.ScreenUpdating = FalseSet S = ActiveSheetSheets(SheetName).ActivateWith Sheets(SheetName).QueryTables(Query) UserName = GetSetting(FullApplicationName, "Login", "UserName") LogOnForm.UserName.Value = UserName If UserName <> "" Then LogOnForm.Password.SetFocus End If If LogOnForm.Password.Value = "" Then Application.ScreenUpdating = True LogOnForm.Show Application.ScreenUpdating = False End If SaveSetting FullApplicationName, "Login", "UserName", LogOnForm.UserName.Value If LogOnForm.CancelButton.Tag = 1 Then LogOnForm.Password.Value = "" Exit Function End If .Connection = "ODBC;DSN=Oracle;" + _ "UID=" + LogOnForm.UserName.Value + ";" + _ "PWD=" + LogOnForm.Password.Value + ";" + _ "Server=" + LogOnForm.DBase.Value .Sql = SqlText Application.DisplayAlerts = False .Refresh BackgroundQuery:=False Application.DisplayAlerts = TrueEnd WithResultFlag = TrueGoTo EndLabelErrorLabel:LogOnForm.Password.Value = ""ErrorSub = "RQuery " & SheetName & " " & QueryErrorMsg = Err.DescriptionErrorProcResultFlag = FalseEndLabel:S.ActivateApplication.ScreenUpdating = TrueRQuery = ResultFlagEnd FunctionPrivate Sub ErrorProc() x = MsgBox("Error" + ErrorSub + "'" + Chr(13) + ErrorMsg, , "Error")End Sub Link to comment Share on other sites More sharing options...
Delphi Posted March 19, 2007 Author Report Share Posted March 19, 2007 (edited) yuriks насколько я понял это создаеться и сохраняеться запрос, в первом случае а во втором его мы просто изменяем тоесть перезаписываем? DSN= Oracle что означает? мне так почемуто кажеться что это указывает что база данных находиться на сервере оракла если я правильно понял Если есть такая возможность чтобы выполнить запрос не сохраняя его как запрос в базе данных то подскажите такую возможность Edited March 19, 2007 by Delphi Link to comment Share on other sites More sharing options...
yuriks Posted March 19, 2007 Report Share Posted March 19, 2007 yuriks насколько я понял это создаеться и сохраняеться запрос, в первом случае а во втором его мы просто изменяем тоесть перезаписываем? Создается об'єкт в Excel-е со своими свойствами, которые можно менять. DSN= Oracle что означает? мне так почемуто кажеться что это указывает что база данных находиться на сервере оракла если я правильно понял Ето имя источника данных ODBC Пример для Oracle но я делал и для MySql и для Excel. (любое) Если есть такая возможность чтобы выполнить запрос не сохраняя его как запрос в базе данных то подскажите такую возможность Он не сохраняется в базе, только в Excel-е Link to comment Share on other sites More sharing options...
Delphi Posted March 20, 2007 Author Report Share Posted March 20, 2007 (edited) Я нашол решение своей проблемы может комуто ещё понадобиться при решении создаеться один запрос который должен быть а дальше такой текст Sub intel() Dim db As Database Dim rs As Recordset Dim qd As QueryDef Dim str As String ' будет сама строка запроса Dim arr1() As String'обявляем масив для первой таблицы Dim i As Integer Dim con As Integer i = 0 Set db = Application.CurrentDb ' открываем нащу бд str = "SELECT Выделено FROM [ТЭ-1-1_Выбрка_СтТовар]GROUP BY Выделено" 'присваиваем переменной текст запроса Set qd = db.QueryDefs("test") ' указываем с каким запросом работать qd.SQL = str 'меняем сам текст запроса Set rs = qd.OpenRecordset(dbOpenDynaset) 'выполняем сам запрос con = rs.RecordCount rs.MoveFirst Do ReDim arr1(i) arr1(i) = rs.Fields(0).Value rs.MoveNext i = i + 1 Loop While Not rs.EOF End Sub Такая схема работает для запросов которые возвращяют записи Edited March 23, 2007 by Delphi Link to comment Share on other sites More sharing options...
Delphi Posted March 23, 2007 Author Report Share Posted March 23, 2007 работал по такому методу нормально пока не понадобилось выплнить запрос на добавление данных и как оказалось такая схема не подходить, может кто знает как можно выполниться запрос который не будет возвращять данных? Link to comment Share on other sites More sharing options...
yuriks Posted March 23, 2007 Report Share Posted March 23, 2007 db.Execute (SqlText) Link to comment Share on other sites More sharing options...
Delphi Posted March 24, 2007 Author Report Share Posted March 24, 2007 db.Execute (SqlText) Я так пробывал и у меня ошибку выдавало Link to comment Share on other sites More sharing options...
Delphi Posted March 26, 2007 Author Report Share Posted March 26, 2007 (edited) у меня получаеться такой фрагмент из модуля Set db = Application.CurrentDb str = "insert into [ТЭ-1-1_Выборка_СтТовар](ключ, выделено, сттовар, признак)VALUES(1357, 'Товар0001' , 'Товар-1' , False)" Set qd = db.QueryDefs("test") qd.SQL = str Set rs = db.Execute(str) при компиляции выдает ошибку следующего типа Expected Function or variable выполняю этотже запрос в как обычный запрос выполняеться нормально подскажите что здесь неправильного Edited March 26, 2007 by Delphi Link to comment Share on other sites More sharing options...
yuriks Posted March 26, 2007 Report Share Posted March 26, 2007 А где именно ошибка ? В какой строке ? и замени Set rs = db.Execute(str) просто на db.Execute(str) Link to comment Share on other sites More sharing options...
Delphi Posted March 26, 2007 Author Report Share Posted March 26, 2007 Спасибо за помощь yuriks правильно сказал что там не надо присваивать )))) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now