私は維持するためにレガシーVB6アプリを継承しました、そして私のvb6は少しさびた以上です...
タイプDAO.DataTypeEnum.dbLongに変更する必要があるタイプDAO.DataTypeEnum.dbIntegerのフィールドを持つDAOテーブルがあります。この新しいデータ型を設定して既存の値を保持するショートカットvb6の方法はありますか、またはデータを格納するための一時列を作成し、新しいデータ型で列を削除して再作成してから、手動でデータを移行する必要がありますか?
私は維持するためにレガシーVB6アプリを継承しました、そして私のvb6は少しさびた以上です...
タイプDAO.DataTypeEnum.dbLongに変更する必要があるタイプDAO.DataTypeEnum.dbIntegerのフィールドを持つDAOテーブルがあります。この新しいデータ型を設定して既存の値を保持するショートカットvb6の方法はありますか、またはデータを格納するための一時列を作成し、新しいデータ型で列を削除して再作成してから、手動でデータを移行する必要がありますか?
データベースエンジンがALTERTABLEALTER COLUMNをサポートしている場合、Shahkalpeshの答えは問題ありません。Accessデータベースエンジン(Jet .mdb、ACE .accdbなど)を使用している場合は、ANSI-92クエリモード(Jet4.0およびAccess2002以降)でALTERCOLUMNを使用できます。
過去に私は完全にコードを通してこのようにそれをしました。以下のコードは、ALTERCOLUMNを使用せずに文字列フィールドを浮動小数点doubleに変換します。別の名前と正しいデータ型で新しいフィールドを作成し、データをコピーして元のフィールドを削除し、新しいフィールドの名前を元の名前に変更します。これを簡単に適応させて、整数から長整数にすることができます。
Dim fld As DAO.Field
' Cant just change the type of an existing field. '
' Instead have to create the new field with a temporary name, '
' fill it with the required data, delete the old MyField field '
' and then rename the new field. The renaming has to be done '
' with DAO - cant do it through SQL '
' Add TEMP_MyField field: required double field. Will be renamed later '
sSQL = "ALTER TABLE MyTable " & _
"ADD COLUMN TEMP_MyField DOUBLE NOT NULL "
dbDatabase.Execute sSQL, dbFailOnError
' Copy the MyField values to the TEMP_MyField field '
sSQL = "UPDATE MyTable SET TEMP_MyField = CDbl(MyField)"
dbDatabase.Execute sSQL, dbFailOnError
' Delete the original MyField field (the text field) '
sSQL = "ALTER TABLE MyTable DROP COLUMN MyField"
dbDatabase.Execute sSQL, dbFailOnError
' Need to refresh the TableDefs to make sure new field shows up '
dbDatabase.TableDefs.Refresh
' Get a reference to the temporary MyField field we just created '
Set fld = dbDatabase.TableDefs("MyTable").Fields("TEMP_MyField")
' Rename it to the final name we want it to have '
fld.Name = "MyField"
これが1回限りのジョブである場合は、Accessデータベースを開いて、データ型を変更できます。
それ以外の場合は、この投稿にコメントを追加してください。
編集:データベースオブジェクトに対してALTERステートメントを発行できます
CurrentDb.Execute "ALTER TABLE myTable ALTER Column myIntegerColumn Long"