カテゴリー
SugiBlog ホームページ制作・システム開発|大阪

Chr関数で表現する制御文字

vbCrLfやvbTabなど、定数が使用できないときにChr関数を使って表現します。

Chr関数の書式

Chr([ASCIIコード])
定数 Chr関数での表記
vbTab Chr(9) タブ
vbCr Chr(13) キャリッジリターン
vbLf Chr(10) ラインフィード
vbCrLf Chr(13) & Chr(10) キャリッジリターン+ラインフィード

ACCESSのクエリでは定数が使用できないので、知っておくと便利です。

7 views

Accessで発生するメモリー不足エラー

Accessで「メモリー不足です」という正体不明のエラーが出て困っています。
使用環境はWindows10 Pro 64bit、Access2016・2013です。

これまでも平常通り行ってきた業務をしていたら、上記のように「メモリー不足です」というエラーが発生し、データ元のAccessファイルが壊れてしまうという現象が発生しました。
原因としては多々あるようですが、原因の1つとして分かったことがあったので共有させていただければと思います。

原因の究明

まず、エラーが出るPCと出ないPCがあること。
出るPCと出ないPCの差を見つける。

発見した原因

積んでいるメモリーの差
エラーが出るPC、出ないPCの差を見たところ、OSはどちらもWindows10 Pro 64bit、CPU等も特に目立った違いがない。
記事の最後にリンクを貼っているMicrosoftのページにあるレジストリの値も全て同じ設定でした。
その他で唯一違ったのが積んでいるメモリー容量で32GBと16GBでした。

エラー解消…ではない

先ほど見つけたのがメモリーの違いということで、エラーが発生するPCの32GBのメモリーを16GBに変更しました。
すると明らかにエラーの発生する頻度が激減!

ただし、激減なので全く出なくなったわけではありません。
完全に解消したいとことなのですが、エラーが出ないPCもあるため、原因の究明はかなり難しいものと思われます。

下記URLも参考にさせて頂いたので、同じように悩まれている方がいらっしゃれば参考にしていただければ幸いです。

参考URL:
Access2010およびAccess2019で謎にエラー、「メモリ不足」でクエリー停止、ちょっとだけ解決
Access でメモリ不足エラーが発生する現象の対処策について

34 views

HTMLソースを取得する VisualC#

System.Net.WebClientクラスを使用してHTMLソースを取得します。

//参照を追加
using System.Net;

・単純なダウンロード

//WebClientの作成
WebClient wc = new WebClient();

//文字コードを指定(Shift_JIS)
wc.Encoding = Encoding.GetEncoding(932);

//HTMLソースをダウンロードする
string source = wc.DownloadString(url);

//後始末
wc.Dispose();

・Timeout設定ができるようにするには

//文字コードを指定(Shift_JIS)
Encoding enc = Encoding.GetEncoding(932);

HttpWebRequest req =
    (HttpWebRequest)WebRequest.Create(url);

req.Timeout = 3000;

WebResponse res = req.GetResponse();

//文字コードを指定(Shift_JIS)し、HTMLソースをダウンロードする
Stream st = res.GetResponseStream();
StreamReader sr = new StreamReader(st, enc);

source = sr.ReadToEnd();

//後始末
sr.Close();
st.Close();

文字コードについてはこちらをご覧ください。
[テキストファイルの読み込みと書き込み]

74 views

iOS13で発生するクラッシュ NSInternalInconsistencyException

GoogleMapを使用したiOSアプリを使っていて、地図を表示しているときに急にクラッシュするようになったので原因を調べました。
発生するエラーの内容は以下の通り

Fatal Exception: NSInternalInconsistencyException
Modifications to the layout engine must not be performed from a background thread after it has been accessed from the main thread.

iOS13で内部仕様が変わったことによるもののようです。

どうもバックグラウンドスレッドからUIを触るなということらしいですが、
そんなことはしていないつもりでした。
おそらくこれまでよりも厳密になったのでしょうか…。
とにかく対応するしかありません。

元のソースコード

let session = URLSession(configuration: URLSessionConfiguration.default)

let task = session.dataTask(with: URLRequest(url: Foundation.URL(string: url)!), completionHandler: { (data, response, error) in
    if let urlContent = data {
        print(urlContent)
    }
})
task.resume()

修正したコード

let session = URLSession(configuration: URLSessionConfiguration.default)

let task = session.dataTask(with: URLRequest(url: Foundation.URL(string: url)!), completionHandler: { (data, response, error) in
    if let urlContent = data {
        DispatchQueue.main.sync {
            print(urlContent)
        }
    }
})
task.resume()
74 views

Emotet 感染の被害が拡大しています

少し前からネット上でも話題となっていますが、Emotet(エモテット)というマルウェアの感染被害が拡大しています。
私の会社でも感染した取引先数社からメールが届いています。

感染してしまうと被害は甚大です。
自身のメールアカウント情報と連絡先、メール本文等の情報を盗み取られてしまいます。
そして感染を拡大するため、連絡先へとマルウェアを含んだメールを送信します。
更には他のマルウェアを呼び込んだり、インターネットバンキングのログイン情報なども盗まれる可能性もあります。
続きを読む…»

146 views

Geocoder APIを利用した座標変換

Geocoder APIを使えば住所から座標を取得することができます。
今回はJavaScriptではなくHTTPリクエストで座標を取得する方法をご紹介します。

取得するデータはJSON形式で受け取るようにしています。
使用する言語はPHPです。

まずはリクエストするURLとAPIキーを宣言

$googleapis = "https://maps.googleapis.com/maps/api/geocode/json";
$api_key    = "YOUR API KEY";

続いてパラメーターを追加していきます。
検索する住所を追加

$googleapis .= "?address=" . $address;

国を指定(同じ名前の地名が中国等にあるとそちらの座標になってしまうことがあります)

$googleapis .= "&components=country:JP";

APIキーを設定します

$googleapis .= "&key=" . $api_key;

file_get_contents関数を使ってデータを取得します。

$data = file_get_contents($googleapis);

返ってきたJSONデータを解析して座標を取り出します。

$json = json_decode($data);

$lat = $json->results[0]->geometry->location->lat;
$lng = $json->results[0]->geometry->location->lng;

if( $json->status == "OK" ) {
    echo $lat . "," . $lng;
}

詳細な仕様は公式ドキュメントを参照ください。
https://developers.google.com/maps/documentation/geocoding/intro#GeocodingRequests

102 views

Realm.addでコンパイルエラー

Realm.addメソッドで以下のようなコンパイルエラーが出ました。

'add(_:update:)' is unavailable: Pass .error, .modified or .all rather than a boolean. .error is equivalent to false and .all is equivalent to true.

どうやら第2引数にbool値を与える仕様が変わった模様。
第2引数に与える値はRealm.UpdatePolicyだそうで、
これまでfalseにしていた場合は.error、trueにしていた場合は.allを指定すればいいようです。

Xcode 11.2.1
Swift 5

165 views

デスクトップのアイコン名の影を消す

Windows 10でデスクトップのアイコン名の影を消す方法です。
システムのプロパティを開き、[詳細設定]タブの[パフォーマンス]の[設定]をクリックします。
開いた[パフォーマンスオプション]の[視覚効果]タブのチェックボックスリストに
「デスクトップのアイコン名に影を付ける」チェックを外す。

205 views

Windows更新プログラムのアンインストール

Windowsの更新プログラムは[コントロールパネル]-[プログラムと機能]-[インストールされた更新プログラムを表示]でアンインストールすることができます。
またコマンドプロンプトからもコマンドでアンインストールできるので、その方法をご紹介したいと思います。

まず、管理者権限にてコマンドプロンプトを起動します。
そして以下のコマンドを入力します。

wusa /unintall /kb:****

****はアンインストールしたい更新プログラムの番号です。
※wusa(wusa.exe)とはWindowsUpdateのスタンドアロンインストーラーです。

ただし、重要な更新プログラムはアンインストールできません。

上記のやり方でアンインストールできない場合があります。
どういった場合かというとネット経由でインストールしたOfficeの場合です。

そのため、何か不具合があってアンインストールしたい更新プログラムがあっても、ネット経由でインストールしたOfficeの場合、KB:****としては適用されていないそうなんです。

ではどうすれば良いのか??
コマンドでOfficeのバージョンをロールバック(ダウングレード)させる必要があります。

例)バージョンを15.0.5163.1000に戻したい。
以下のコマンドを実行します。

cd c:¥Program Files¥Microsoft Office 15¥ClientX86
officec2rclient.exe /update user updatetoversion=15.0.5163.1000

officec2rclient.exeの場所はバージョンによって異なります。
上記の例ではOffice2013の場合です。

114 views

Windows10でスタートアップ(起動)に問題発生

Windows10にて、起動時や起動してしばらくするとブルースクリーンが表示されるエラーが発生しました。

エラーの内容は

お使いのPCまたはデバイスは修復する必要があります
必要なファイルが見つからないか、ファイルにエラーがあるため、アプリケーションまたはオペレーティング
システムをロードできませんでした。

というものです。
私が遭遇したのはwinloadに関するエラーでした。

解決方法

スタートから設定を選択。

Windowsの設定画面で[更新とセキュリティ]をクリック

左のメニューから[回復]をクリック

右から「PCの起動をカスタマイズする」のところの[今すぐ再起動]をクリック

「オプションの選択」画面が表示されたら[トラブルシューティング]をクリック

「トラブルシューティング」画面で[詳細オプション]をクリック

「詳細オプション」画面で[自動修復]をクリック
自動修復を試してみます。

自動修復で解決できない場合は[コマンドプロンプト]を実行します。

「コマンドプロンプト」が表示されたら、以下のコマンドを実行します。

X:\windows\system32>bcdboot c:\windows /s c:

「c:\windows」は、Windowsシステムのルートの場所です。「c:」はブートパーティション。

ブートファイルは正常に作成されました。と表示されればOK。
私の場合、これでWindowsの起動に関するエラーが解消しました。

134 views