Delphi Опубликовано 19 марта, 2007 Жалоба Поделиться Опубликовано 19 марта, 2007 (изменено) Здраствуйте работаю в аксесе и возникла такая необходимость написать програмку на бейсике в принципе ничего сложного только одно но адо выполнять запросы sql а как это сделать пока не нашол уже полтора часа мучаюсь нашол два варианта QueryDef но как написано он работает с запросами которые уже есть в базе данных а мне надо програмно генерировать запросы(просто суть работы идет в сравнении,а это лутче как мне кажеться запросами делать) и второй способ это Command хотел с ним попробовать но вообще ничего не понял. Как вы можете посоветовать выполнять запросы в бейсике. Если не сложно приведите пример или дайте ссылку P.S. подобных тем я не нашол Изменено 19 марта, 2007 пользователем Delphi Ссылка на комментарий Поделиться на другие сайты Поделиться
yuriks Опубликовано 19 марта, 2007 Жалоба Поделиться Опубликовано 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Delphi Опубликовано 19 марта, 2007 Автор Жалоба Поделиться Опубликовано 19 марта, 2007 (изменено) yuriks насколько я понял это создаеться и сохраняеться запрос, в первом случае а во втором его мы просто изменяем тоесть перезаписываем? DSN= Oracle что означает? мне так почемуто кажеться что это указывает что база данных находиться на сервере оракла если я правильно понял Если есть такая возможность чтобы выполнить запрос не сохраняя его как запрос в базе данных то подскажите такую возможность Изменено 19 марта, 2007 пользователем Delphi Ссылка на комментарий Поделиться на другие сайты Поделиться
yuriks Опубликовано 19 марта, 2007 Жалоба Поделиться Опубликовано 19 марта, 2007 yuriks насколько я понял это создаеться и сохраняеться запрос, в первом случае а во втором его мы просто изменяем тоесть перезаписываем? Создается об'єкт в Excel-е со своими свойствами, которые можно менять. DSN= Oracle что означает? мне так почемуто кажеться что это указывает что база данных находиться на сервере оракла если я правильно понял Ето имя источника данных ODBC Пример для Oracle но я делал и для MySql и для Excel. (любое) Если есть такая возможность чтобы выполнить запрос не сохраняя его как запрос в базе данных то подскажите такую возможность Он не сохраняется в базе, только в Excel-е Ссылка на комментарий Поделиться на другие сайты Поделиться
Delphi Опубликовано 20 марта, 2007 Автор Жалоба Поделиться Опубликовано 20 марта, 2007 (изменено) Я нашол решение своей проблемы может комуто ещё понадобиться при решении создаеться один запрос который должен быть а дальше такой текст 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 Такая схема работает для запросов которые возвращяют записи Изменено 23 марта, 2007 пользователем Delphi Ссылка на комментарий Поделиться на другие сайты Поделиться
Delphi Опубликовано 23 марта, 2007 Автор Жалоба Поделиться Опубликовано 23 марта, 2007 работал по такому методу нормально пока не понадобилось выплнить запрос на добавление данных и как оказалось такая схема не подходить, может кто знает как можно выполниться запрос который не будет возвращять данных? Ссылка на комментарий Поделиться на другие сайты Поделиться
yuriks Опубликовано 23 марта, 2007 Жалоба Поделиться Опубликовано 23 марта, 2007 db.Execute (SqlText) Ссылка на комментарий Поделиться на другие сайты Поделиться
Delphi Опубликовано 24 марта, 2007 Автор Жалоба Поделиться Опубликовано 24 марта, 2007 db.Execute (SqlText) Я так пробывал и у меня ошибку выдавало Ссылка на комментарий Поделиться на другие сайты Поделиться
Delphi Опубликовано 26 марта, 2007 Автор Жалоба Поделиться Опубликовано 26 марта, 2007 (изменено) у меня получаеться такой фрагмент из модуля 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 выполняю этотже запрос в как обычный запрос выполняеться нормально подскажите что здесь неправильного Изменено 26 марта, 2007 пользователем Delphi Ссылка на комментарий Поделиться на другие сайты Поделиться
yuriks Опубликовано 26 марта, 2007 Жалоба Поделиться Опубликовано 26 марта, 2007 А где именно ошибка ? В какой строке ? и замени Set rs = db.Execute(str) просто на db.Execute(str) Ссылка на комментарий Поделиться на другие сайты Поделиться
Delphi Опубликовано 26 марта, 2007 Автор Жалоба Поделиться Опубликовано 26 марта, 2007 Спасибо за помощь yuriks правильно сказал что там не надо присваивать )))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти