當前位置:首頁 » 數據倉庫 » 資料庫報無效的變數名
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

資料庫報無效的變數名

發布時間: 2022-09-11 04:10:46

A. P/S報警:宏變數名稱無效!(#0105,Z0.)怎麼解除報警

執行宏替換。
& VarName[.cExpression]
參數
& VarName
指定宏替換中引用的內存變數名或數組元素名。請不要加上用於區分內存變數與欄位的前綴 M.,否則將產生語法錯誤。宏的長度不要超過 Visual FoxPro 中允許的最大語句長度。
在宏替換中,變數不能遞歸引用其自身。例如,下列語句將產生錯誤信息:
STORE '&gcX' TO gcX
? &gcX
出現在 DO WHILE、FOR 和 SCAN 中的宏替換語句只在循環開始時計算值,在後續的循環中則不再計算值。因此在循環內改變內存變數和數組元素的值對宏替換都無效。
.cExpression
句點分隔符 (.) 和 cExpression 選項可用來在宏後面追加額外的字元。使用 .cExpression 附加在宏後面的 cExpression 也可以是一個宏。如果 cExpression 是一個屬性名, 包括一個額外的點號 (cExpression..PropertyName)。
備注
宏替換把內存變數和數組元素中的內容當作原義字元串。當連字元 (&) 位於字元型內存變數或數組元素前面時,內存變數和數組元素的內容將替代宏引用。宏替代可用在任何接受原義字元串的命令和函數中。
提示 請盡可能使用名稱表達式來取代宏替換。名稱表達式與宏替換作用相似,但是,名稱表達式限於傳遞作為名稱的字元串。當命令或函數接受名稱(文件名、窗口名、菜單名等)時,使用名稱表達式的處理速度要明顯快得多。有關名稱表達式的詳細內容,請參閱語言概述。
下列代碼可以正確執行:
STORE 'customer' TO gcTableName
STORE 'company' TO gcTagName
USE &gcTableName ORDER &gcTagName
但是可以使用名稱表達式代替:
USE (gcTableName) ORDER (gcTagName)
宏替換對於替換命令中的關鍵字是很有用的。在下面的示例中,把 TALK 設置保存在內存變數中,以便後面的程序能夠恢復它。TALK 的原始設置使用宏替換恢復。
示例
STORE SET('TALK') TO gcSaveTalk
SET TALK OFF
*
* 額外的程序代碼
*
SET TALK &gcSaveTalk && 恢復原始的 TALK 設置

B. 凱恩帝宏變數名稱無效(#101,Z0)操作錯0437。一直報警關機重啟無效。

您肯定是重命名了系統的宏變數,而且使用了非法的宏變數名稱,建議您重新導入符合規范的自定義宏變數名稱

C. 下面選項中哪個是無效的變數名 A、 address1 B、23PO C、 Class_n D、this_var_33

B
雖然忘了什麼規則了,但可以用排除法呀,A就純單文加數字,而B和D都帶數字,如果變數不能用數字,那肯定有三個無效的變數名,當然,作為單選題,這肯定是不正確的,C和D都帶下劃線,所以同理,下劃線也是能作為變數名里使用的,只有B帶?,所以選B

D. 資料庫中插入一條記錄時對象名無效怎麼辦謝了。

是資料庫內的表不存在導致,一般有如下幾種情況:
1、你輸入的表名錯誤或表不存在;
2、你訪問的表存在,但該表不是訪問資料庫的程序的用戶下的。

E. 如何解決「sql對象名無效」的問題

SQL對象名無效的解決方法

產生SQL對象名無效的問題大多原因是由於數據遷移導致的,下面我們給出解決方法.

在使用資料庫的過程中,經常會遇到資料庫遷移或者數據遷移的問題,或者有突然的資料庫損壞,這時需要從資料庫的備份中直接恢復。但是,此時會出現問題,這里說明幾種常見問題的解決方法。

一、孤立用戶的問題
比如,以前的資料庫的很多表是用戶test建立的,但是當我們恢復資料庫後,test用戶此時就成了孤立用戶,沒有與之對應的登陸用戶名,哪怕你建立了一個test登錄用戶名,而且是以前的用戶密碼,用該用戶登錄後同樣沒辦法操作以前屬於test的用戶表。

這個問題有兩種辦法解決。 先說解決的前提條件。
首先,要用備份文件還原資料庫,我們這里的資料庫名為testdb,裡面有屬於用戶test的用戶表。這個很容易了操作了,不多講了,在企業管理器中很方便可以恢復。恢復後,就產生了孤立用戶test。然後,用sa用戶或者具有DBA許可權的用戶登錄,創建一個test資料庫登錄用戶,密碼隨便設置了,也可以和以前的保持一致。我們用它來對應孤立的test用戶。

使登錄用戶和資料庫的孤立用戶對應起來
其實我們建立了同樣名稱的資料庫登錄用戶後,資料庫中的表我們照樣不能使用時因為sid的不同,就是系統登錄表和資料庫用戶表中的用戶名相同,單是sid欄位,資料庫中的還是以前舊系統的sid值,所以我們就要把它對應成我們新建的,資料庫靠sid來識別用戶。
這里可以使用存儲過程sp_change_users_login。它有三種動作,分別是report,update_one和auto_fix。

運行sp_change_users_login 'report',系統會列出當前資料庫的孤立用戶數。

我們只需要選擇當前資料庫為testdb,然後運行 sp_change_users_login 'update_one','test','test' --系統就會提示修復了一個孤立用戶。

如果沒有建立test的登錄用戶,還可以用 sp_change_users_login 'Auto_Fix', 'test', NULL,
'testpassword' --來創建一個登錄用戶名為test,密碼為testpassword的用戶與之對應。
好了,到這里通常情況下,資料庫對象得到訪問問題已經解決了。如果有多個資料庫中有同一個用戶的數據表,只需要選擇不同的資料庫,執行update_one的那個就行了。

二、對象名 『tablename』 無效的問題 這里可能會有人遇到對象名
『tablename』無效的問題。系統表卻不會產生這個問題,而用戶表還要加上用戶名,然後是表明才能訪問,比如select * from
author,會說對象名 author 無效,而用select * from test.author就可以訪問,這個是用戶首選身份的問題。

方法一: 解決很簡單,就是察看test登錄用戶是否具有dbo的許可權或者系統管理的許可權,有的話去掉就行了。 因為如果用戶有dbo身份,那麼它登陸後的默認表空間是dbo的系統表空間,所以去掉了之後,就會以正常的test表空間訪問數據表了。

方法二: 將所有test所有表設置為dbo就OK了

執行語句:exec sp_msforeachtable "sp_changeobjectowner '?','dbo'"

孤立帳戶,就是某個資料庫的帳戶只有用戶名而沒有登錄名,這樣的用戶在用戶庫的sysusers系統表中存在,而在master資料庫的syslogins中卻沒有對應的記錄。
孤立帳戶的產生一般是一下兩種: 1.將備份的資料庫在其它機器上還原; 2.重裝系統或SQL SERVER之後只還原了用戶庫
解決方法是使用sp_change_users_login來修復。
sp_change_users_login的用法有三種
用法1: exec sp_change_users_login 'REPORT'
列出當前資料庫的孤立用戶
用法2: exec sp_change_users_login 'AUTO_FIX','用戶名'
可以自動將用戶名所對應的同名登錄添加到syslogins中
用法3: exec sp_change_users_login 'UPDATE_ONE','用戶名','登錄名' 將用戶名映射為指定的登錄名。

F. 易語言保存資料庫時提示錯誤「無效的欄位名稱」

是欄位名稱非法不是文件名

G. sql語句執行cmd.ExecuteScalar()時出現 ORA-01036: 非法的變數名/編號 錯誤!

改為
int p = Convert.ToInt32(SqlHelper.ExecuteScalar("select count(*) from AN_TO_AGENCY t where t.gw_time between to_date(:stTime,'yyyy-MM-dd HH24:mi:ss') and to_date(:edTime,'yyyy-MM-dd HH24:mi:ss')", new OracleParameter(":stTime", dp_startTime.Value.ToString()), new OracleParameter(":edTime", dp_endTime.Value.ToString())));

把sql語句裡面的參數的單引號去掉了,不應該帶單引號。

H. SQL資料庫時提示對象名'XXX' 無效,什麼原因

原因一:新建的資料庫,沒有將初始數據導入到新庫里。

解決方法:

請登錄到我司資料庫控制面板->備份還原系統,然後使用資料庫還原的功能,在那裡直接將您的資料庫備份上傳還原,如果操作過程沒有出現錯誤,一般您的資料庫就已經還原了,此方法適合還原一些初始數據不是很大的資料庫(30M以內),如果您的資料庫初始數據很大,在線上傳還原的成功率比較低,這時請使用資料庫導入導出的方法進行還原,詳細的導入導出方法請查看我司的另一篇幫助文檔資料庫導入導出方法詳解


原因二:資料庫做過遷移,新資料庫的對象所有者名稱不同造成

資料庫做了遷移後,一般會進行導入/還原數據的過程,在這個過程中,要注意新資料庫的完整對象名與原來是一致的。

比如,您的舊資料庫名叫 db1 , 舊資料庫用戶是 dbuser1, 現在要遷移到新的資料庫上,新資料庫名是 db2, 新資料庫用戶是 dbuser2。
sqlserver對象的完整對象名是資料庫名.用戶名.表名這樣的,假設你的舊資料庫上有個表名叫 table1,那它的完整對象名就是 db1.dbuser1.table1,
當你用新的資料庫名登錄導入舊數據時,新的表名可能變成了 db2.dbuser2.table1,這樣的話,您的程序查詢數據時可能會出現對象名無效的錯誤。

解決方法:要解決這個問題,一般需要做兩步操作:

1. 請分別使用sp_changeobjectowner '這里改為資料庫完整對象名','dbo'這個命令將所有的用戶表,用戶視圖,用戶存儲過程等的所有者全部改為系統內建的特殊用戶dbo
以下是一個可以簡化執行上面操作的存儲過程,以下存儲過程運行後可能還會有部分的對象改不到所有者,這時請手動執行上面的命令將未能改所有者的對象重新嘗試一下。
declare @CrsrVar cursor
declare @pname varchar(40) --對象名
declare @oldowner varchar(40) --原對象所有者
declare @objfullname varchar(80) --原對象全名
set @oldowner = '這里改為數據表/視圖/存儲過程等的舊所有者名稱'

set @CrsrVar = Cursor For select name from sysobjects where xtype='U' --xtype=U 表示用戶表
open @CrsrVar
fetch next from @CrsrVar into @pname

while(@@fetch_status=0)
begin
set @objfullname = @oldowner + '.' + @pname
exec sp_changeobjectowner @objname=@objfullname,@newowner='dbo' --dbo為所有者名
fetch next from @CrsrVar into @pname
end

close @CrsrVar
deallocate @CrsrVar

2. 可能您的編寫網站程序的時候沒有注意通用性,在查詢數據時採用了類似select * from dbuser1.table1這樣的SQL語句,一般來說,這不是一個好的習慣,在這種情況下,如果資料庫遷移過的話,經常會導致對象名無效的錯誤,為了避免這種不必要的問題,建議您在程序中查詢數據時,直接用select * from table1這樣的方式,就是在程序中不在用對象的完整名稱,而是單使用表名或視圖名,這樣就可以避免不必要的「對象名無效」的問題。

I. 安裝資料庫時「指定實例名稱無效」是什麼意思

安裝資料庫時「指定實例名稱無效」是設置錯誤造成的,解決方法為:

1、打開HeidiSQL,選擇要查看的伺服器連接,然後點擊【打開】。