Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: путь от DAO.
 
 автор: kot_k_k   (26.11.2009 в 13:13)   личное сообщение
 
 

из mdb создал ADP - таблы на MSSQL2005
вроде нормально - таблы работают, но весь код написан на DAO.

Вопрос: в DAO все просто set dbs=Currentdb(), а как в данном случае получить доступ к таблам, и вообще можно ли средствами DAO работать в это случае? если НЕТ - то пререходить на ADODB - то есть ли какой конвертер для преобразования кода?
или весь код переписывать ручками?

  Ответить  
 
 автор: osmor   (26.11.2009 в 13:18)   личное сообщение
 
 

Конвертора не видел.
Придется переписать.
Кроме того тексты SQL запросов, тоже возможно придется править, если в них используются функции access (Format, nz, iif и т.п.)

  Ответить  
 
 автор: kot_k_k   (26.11.2009 в 13:27)   личное сообщение
 
 


ручками - это смэрть, тада пока повременим, хотя что потом делать

а такой момент - если продолжить писать, но с применением ADODB (прога работает и разрабатывается одновременно), нужно ли будет что-либо переписывать ADODB-шную часть если потом создать ADP.


Кроме того тексты SQL запросов, тоже возможно придется править, если в них используются функции access (Format, nz, iif и т.п.)

и где можно глянуть различия SQL и Акса

  Ответить  
 
 автор: Мюллер   (26.11.2009 в 14:13)   личное сообщение
 
 

Гляньте книги по T-SQL ( это MSSQLSERVER).
При переходе придется переписать не только некоторые запросы, но и желательно предусмотреть защиту от SQL Injection.

[
Пример: убрать конструкции типа
CurrentProject.Execute"Select * From Tbl1 Where Tbl1.Field1=" & me.Поле1.Value
]

  Ответить  
 
 автор: osmor   (26.11.2009 в 14:20)   личное сообщение
 
 

в инетне есть вроде тулзы для Access которые позволяют искать/заменять куски причем с довольно развитой логикой поиска

Если все писать на ADO то тексты запроса все равно вероятно придется править.

и где можно глянуть различия SQL и Акса


Когда-то давно на сайте Новикова, была утилита конвертирующая запросы в синтаксис T-SQL, но правда для MSQ 7.0. Сайт давно не доступен, утилиты у меня нет.
Запросы если в них не используются данные из полей форм и функции ACCESS конвертируются в ADP нормально. Где посмотреть список отличий не знаю. может в инете что есть...
Из того что помню в like вместо "*" нужно использовать "%"

сам никогда не переводил с MDB в adp только с нуля

  Ответить  
 
 автор: kot_k_k   (26.11.2009 в 16:38)   личное сообщение
 
 

Спасибо, братья, порадовали
чем дальше в лес - тем больше вопросов.

Вопрос: что использовать в место временных таблиц???

делал формы на основании временных данных из заполняемых кодом в таблицы (у каждого юзера получалась своя табла), по кнопке записать - перебрасывал все изменения в основные, временные данне удалял, как сей прекрасный момент - произвести в ADP, там ведь табла одна на всех, конечно можно добавить данные о пользователе но как-то сложновастенько или там другой подход.

  Ответить  
 
 автор: osmor   (26.11.2009 в 16:45)   личное сообщение
 
 

на sql есть временные таблицы
#tblName - временная таблица доступная только текущему пользователю
##tblName - временная таблица доступная всем пользователям

  Ответить  
 
 автор: Мюллер   (26.11.2009 в 16:58)   личное сообщение
 
 

С помощью хранимых процедур можно обойтись и без временных таблиц

  Ответить  
 
 автор: kot_k_k   (26.11.2009 в 17:24)   личное сообщение
 
 

#tblName - временная таблица доступная только текущему пользователю

а как это сво-во устанавливается или нужно так назвать

С помощью хранимых процедур 

а это что за зверь такой

  Ответить  
 
 автор: osmor   (26.11.2009 в 17:30)   личное сообщение
 
 

имя должно начинаться с #

  Ответить  
 
 автор: Мюллер   (26.11.2009 в 17:38)   личное сообщение
 
 

Погугли на Stored Procedure.

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

Вот пример хранимки, использующей курсоры



ALTER PROCEDURE _Cursor

AS
BEGIN TRAN
DECLARE @IdObj int
DECLARE @IdTblDolsh int
DECLARE @IdIstInv int
DECLARE @IdDolshPlanFin int
DECLARE CurDolPlanFin CURSOR FOR
SELECT IdTblDolsh FROM TblPlanPokazateli
OPEN CurDolPlanFin
FETCH NEXT FROM CurDolPlanFin INTO @IdDolshPlanFin
WHILE @@FETCH_STATUS =0
BEGIN

IF @IdDolshPlanFin NOT IN (SELECT IdTblDolsh FROM TblDolsh)
BEGIN

DELETE FROM TblPlanPokazateli WHERE IdTblDolsh=@IdDolshPlanFin

END
FETCH NEXT FROM CurDolPlanFin INTO @IdDolshPlanFin
END
CLOSE CurDolPlanFin
DEALLOCATE CurDolPlanFin

DECLARE CurDol CURSOR FOR
SELECT IdTblDolsh,IdObj FROM TblDolsh
OPEN CurDol

FETCH NEXT FROM CurDol INTO @IdTblDolsh, @IdObj

WHILE @@FETCH_STATUS = 0
BEGIN

IF @IdTblDolsh NOT IN (SELECT IdTblDolsh FROM TblPlanPokazateli)

BEGIN

DECLARE CurIstInv CURSOR FOR
SELECT IdIstInv FROM TblKlassIstInv
OPEN CurIstInv
FETCH NEXT FROM CurIstInv INTO @IdIstInv
WHILE @@FETCH_STATUS = 0
BEGIN

INSERT INTO TblPlanPokazateli (IdObj,IdTblDolsh,IdIstFin,Smet,Dom,Kv,Plosh,OstSmet) VALUES (@IdObj,@IdTblDolsh,@IdIstInv,0,0,0,0,0)


FETCH NEXT FROM CurIstInv INTO @IdIstInv
END
CLOSE CurIstInv
DEALLOCATE CurIstInv

END

FETCH NEXT FROM CurDol INTO @IdTblDolsh, @IdObj
END

CLOSE CurDol
DEALLOCATE CurDol

COMMIT

RETURN

  Ответить  
 
 автор: kot_k_k   (26.11.2009 в 17:57)   личное сообщение
 
 

так на сегодня досыть, всем спасибо, чувствую что за сегодня стал умнее, но понял что нужно либо читать до фига по SQL который я оказывается не знаю, либо идтить на курсы повышения SQL-ности в голове

  Ответить  
 
 автор: Explorer   (26.11.2009 в 18:22)   личное сообщение
 
 


или весь код переписывать ручками?



сугубо ИМХО неплохой повод для рефакторинга всего приложения :)

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList