Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 1 | 
 
			
 
  
		
     
  
    
Вопрос: Excel+Access
     
    
Добавлено: 27.05.08 20:30
     
      
  
				
			  
					 
			
				 
    
		
       
    
Автор вопроса:  
    
 Helgi
      
       
  
Доброго времени суток!
 
    
Пишу приложение для работы с access базой данных в excel. У меня 5 таблиц, 3 из них справочники, 2 
главных. В начале работы приложения я открываю все 5 таблиц(работаю через Recordset) и потом по мере 
надобности с манипулирую ими.Так вот, я столкнулся с такой проблемой: Для 3-х таблиц(справочников) 
удаление/редактирование/добавление работает, а для главных ругается что таблица открыта только для чтения, 
хотя код для открытия набора данных у меня одинаковый для всех таблиц, код на редактирование/удаление/ 
добавление тоже идентичен, все таблицы лежат в одном MDB файле... с чем это может быть связано? 
Пример кода:
'для таблицы-справочника
Sub SotovyUpdate() 'Обновление
    QS = "SELECT Marka.M_Marka, Model.MOD_MODEL, Sotovy.S_Opis, 
Sotovy.S_Foto,Sotovy.S_Marka,Sotovy.S_Model FROM Model INNER JOIN (Marka INNER JOIN Sotovy ON Marka.M_ID = 
Sotovy.S_Marka) ON Model.MOD_ID = Sotovy.S_Model;"
    Set RSSot = DB.OpenRecordset(QS, dbOpenDynaset, dbDenyRead + dDenyWrite)
End Sub
With RSSot
    .AddNew 'добавление
    .Fields("S_MARKA").Value = MARKA_ID
    .Fields("S_MODEL").Value = MODEL_ID
    .Fields("S_OPIS").Value = SOPIS
    .Fields("S_FOTO").Value = path
    .Update
   End With
'для главной таблицы 
Sub SkPokUpdate() 
    QS = "SELECT M_MARKA,MOD_MODEL,SKPOK_KOLVO,SKPOK_CENA,SKPOK_DATA,S_OPIS,S_FOTO FROM 
SkladPok,Model,Marka,Sotovy "
    QS = QS & "WHERE(SKPOK_SOTID = S_ID AND S_MARKA = M_ID AND S_MODEL = MOD_ID)"
    Set RSSkPok = DB.OpenRecordset(QS, dbOpenDynaset, dbDenyRead + dDenyWrite)
End Sub
With RSSkPok
 .AddNew
 .Fields("SKPOK_SOTID").Value = S_ID
 .Fields("SKPOK_KOLV").Value = Kolv
 .Fields("SKPOK_CENA").Value = Cena
 .Fields("SKPOK_Data").Value = Data
 .Update
End With
				
		
		
					 
			
				 
  
		
     
  
    
Ответы
     
    
Всего ответов: 4
     
      
  
		
	  
			 
	
		 
    
       
    
Номер ответа: 1 
      
Автор ответа:
 Holsten
![]()
Вопросов: 5
Ответов: 100
      
 Профиль |  | #1
       
Добавлено:  27.05.08 20:49
       
    
       
  
Попробуй для проверки убрать из секции SELECT те поля, которые имеют отношение к "справочникам".
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа:
 Helgi
![]()
![]()
Вопросов: 1
Ответов: 2
      
 Профиль |  | #2
       
Добавлено:  27.05.08 21:09
       
    
       
  
Хм... так работает... а как это можно исправить?
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа:
 Helgi
![]()
![]()
Вопросов: 1
Ответов: 2
      
 Профиль |  | #3
       
Добавлено:  27.05.08 21:14
       
    
       
  
Огромное спасибо) В принципе, исправил) Но если есть более рациональные предложения, буду очень рад)
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа:
 Holsten
![]()
Вопросов: 5
Ответов: 100
      
 Профиль |  | #4
       
Добавлено:  27.05.08 21:26
       
    
       
  
Попробуй связать поля в секции FROM через INNER JOIN. И кроме того, как-то извратно обновлять/добавлять записи через SELECT с последующим апдейтом рекордсета. Может сразу "INSERT INTO SkladPok (SKPOK_KOLVO,SKPOK_CENA,SKPOK_DATA) VALUES (_,_,_) ...."